天天看點

Redis應用場景

noeviction:當記憶體使用達到門檻值的時候,所有引起申請記憶體的指令會報錯。

allkeys-lru:在所有鍵中采用lru算法删除鍵,直到騰出足夠記憶體為止。

volatile-lru:在設定了過期時間的鍵中采用lru算法删除鍵,直到騰出足夠記憶體為止。

allkeys-random:在所有鍵中采用随機删除鍵,直到騰出足夠記憶體為止。

volatile-random:在設定了過期時間的鍵中随機删除鍵,直到騰出足夠記憶體為止。

volatile-ttl:在設定了過期時間的鍵空間中,具有更早過期時間的key優先移除。

1、資料緩存 String:驗證碼、計數器、限流、session共享 Set:去重計數、交并集 List:隊列、阻塞隊列 sortSet:排行榜、延時隊列 hash:對象存儲、購物車 pub/sub:釋出訂閱

2、驗證碼: jedis.setex("login:18888888888", 300, "054543");

3、計數器 jedis.incr(key); 計數器+1 傳回目前值 jedis.incrby(key,n);//計數器增加n 傳回目前值

4、限流 //每秒點選超過多少次 if(jedis.incr(key)>10){ return false; } //set 每秒超過多少個使用者點選 if(jedis.llen(userkey)>10){ return false; }

5、實時排行榜 具體代碼見RedisApiUtil 積分添加、擷取m-n的使用者及積分、擷取使用者積分、擷取使用者排名、擷取積分段使用者數、删除使用者

6、分布式鎖 具體代碼見RedisApiUtil //key:業務key requestId:随機id 1000(毫秒)占用鎖時間 lockStatus為true時擷取鎖成功 while(true) { bool lockStatus = RedisApiUtil.tryGetDistributedLock(key, requestId,1000); if(lockStatus){ //TODO //清除鎖并退出循環 RedisApiUtil.releaseDistributedLock(key, requestId, DbContextHolder.getDBType()); break; } }

7、阻塞/非阻塞隊列 使用redis的list作為輕量級隊列 lpush key value 入隊 brpop key 30 出隊(如果隊列目前沒有值,則等待30秒,30秒内有資料插入則執行出隊)

8、延時隊列 訂單超過 30 分鐘未支付,則自動取消 //key為訂單取消隊列 time 為訂單取消時間戳 trans為訂單号 RedisApiUtil.setSortedSet(key,time, trans); 啟動一個線程 每秒擷取值為目前時間戳的trans清單 不要求特别精确的話可以每分鐘擷取小于目前時間戳的trans清單

9、釋出訂閱 可用于資料緩存任務分發 中心更新了緩存,通過釋出訂閱通知到各個伺服器 各個伺服器拉取最新緩存

10、防并發 詳見掃碼平台代碼

11、lua腳本 原子性的指令集合,具體代碼略

12、通道 多個指令一起發送 減少網絡開銷 Transaction tx = jedis.multi();//開啟通道 tx.set(key, value); tx.expire(key, seconds); List<Object> results = tx.exec();//傳回值

13、set集合操作 去重計數 抽獎:參與抽獎使用者放入一個LottySet 抽取随機n位使用者 SRANDMEMBER LottySet 3 交并集 共同關注的人:取交集 可能認識的人:取并集

14、hash 對象存儲 購物車 userkeygoodskey:goodsNum

15、session共享 叢集式web應用 将session存儲至redis 并重寫伺服器session方法

16、地理位置應用 3.2版本以後支援 lbs應用(附近的人、外賣、商鋪等等): geoadd beijing 116.443 39.436 張三 添加張三位置資訊到北京組 geodist beijing zhangsan lisi km 計算張三李四距離多遠 geopos beijing zhangsan 擷取張三坐标 geohash beijing zhangsan 擷取張三的geohash georadiusbymember beijing zhangsan 5 km count 10 asc 按最近距離擷取張三5km附近的10個人 可選參數:withcoord 傳回包含經緯度 withdist 傳回包含距離 withhash傳回包含geohash georadius beijing 116.443 39.436 5 km withdist count 5 asc 按最近距離擷取離輸入坐标5km附近的5個人 可選參數同上 搖一搖:每秒或幾秒生成一個set,搖動手機時 将使用者key+geohash插入set,并随機擷取目前時間set内的一位使用者

17 bitmap: 計數器、布隆過濾器