sorted_set型別
- 新的儲存需求:資料排序有利於資料的有效展示,需要提供一種可以根據自身特徵進行排序的方式
- 需要的儲存結構:新的儲存模型,可以儲存可排序的資料
- sorted_set型別:在set的儲存結構基礎上新增可排序欄位
sorted_set型別資料的基本操作
新增資料
zadd key score1 member1 [score2 member2]
獲取全部資料
zrange key start stop [WITHSCORES] zrevrange key start stop [WITHSCORES]
刪除資料
zrem key member [member ...]
按條件獲取資料
zrangebyscore key min max [WITHSCORES] [LIMIT] zrevrangebyscore key max min [WITHSCORES]
條件刪除資料
zremrangebyrank key start stop zremrangebyscore key min max
注意:
- min於max用於限定搜尋查詢的條件
- start與stop用於限定查詢範圍,作用於索引,表示開始和結束索引
- offset與count用於限定查詢範圍,作用與查詢結果,表示開始位置和資料總量
獲取集合資料總量
zcard key zcount key min max
集合交、並操作
zinterstore destination numkeys key [key ...] zunionstore destination numkeys key [key ...]
sorted_set型別資料的擴充套件操作
業務場景
票選廣東十大傑出青年,各類綜藝選秀海選投票
各類資源網站TOP10(電影,歌曲,遊戲等)
聊天室活躍度統計
遊戲好友親密度
業務分析
- 為所有參與排名的資源建立排序依據
解決方案
- 獲取資料對應的索引(排名)
zrank key member zrevrank key member
- score值獲取與修改
zscore key member zincrby key increment member
Tips1:
- redis應用於計數器組合排序功能對應的排名
sorted_set型別資料操作的注意事項
- score儲存的資料儲存空間是64位,如果是整數範圍是-9007199254740992~9007199254740992
- score儲存的資料也可以是一個雙精度的double值,基於雙精度浮點數的特徵,可能會丟失精度,使用時 候要慎重
- sorted_set 底層儲存還是基於set結構的,因此資料不能重複,如果重複新增相同的資料,score值將被反 復覆蓋,保留最後一次修改的結果
業務場景
基礎服務+增值服務類網站會設定各位會員的試用,讓使用者充分體驗會員優勢。例如觀影試用VIP、遊戲 VIP體驗、雲盤下載體驗VIP、資料檢視體驗VIP。當VIP體驗到期後,如果有效管理此類資訊。即便對於正式 VIP使用者也存在對應的管理方式。
網站會定期開啟投票、討論,限時進行,逾期作廢。如何有效管理此類過期資訊。
解決方案
對於基於時間線限定的任務處理,將處理時間記錄為score值,利用排序功能區分處理的先後順序
記錄下一個要處理的時間,當到期後處理對應任務,移除redis中的記錄,並記錄下一個要處理的時間
當新任務加入時,判定並更新當前下一個要處理的任務時間
為提升sorted_set的效能,通常將任務根據特徵儲存成若干個sorted_set。例如1小時內,1天內,周內, 月內,季內,年度等,操作時逐級提升,將即將操作的若干個任務納入到1小時內處理的佇列中
獲取當前系統時間
time
Tips2:
- redis 應用於定時任務執行順序管理或任務過期管理
業務場景
任務/訊息權重設定應用
當任務或者訊息待處理,形成了任務佇列或訊息佇列時,對於高優先順序的任務要保障對其優先處理,如何實現任務權重管理。
解決方案
對於帶有權重的任務,優先處理權重高的任務,採用score記錄權重即可 多條件任務權重設定
如果權重條件過多時,需要對排序score值進行處理,保障score值能夠相容2條件或者多條件,例如外貿 訂單優先於國內訂單,總裁訂單優先於員工訂單,經理訂單優先於員工訂單因score長度受限,需要對資料進行截斷處理,尤其是時間設定為小時或分鐘級即可(折算後)
先設定訂單類別,後設定訂單發起角色類別,整體score長度必須是統一的,不足位補0。第一排序規則首 位不得是0
- 例如外貿101,國內102,經理004,員工008。
- 員工下的外貿單score值為101008(優先)
- 經理下的國內單score值為102004
Tips3:
- redis 應用於即時任務/訊息佇列執行管理
本作品採用《CC 協議》,轉載必須註明作者和本文連結