sorted set 数据类型的应用场景
1.簡介
在 set 的基礎上給集合中每個元素關聯了一個分數,往有序集合中插入數據時會自動根據這個分數排序。它保留了元素不能重復的特性,并且元素是有序的。
2.基本操作
zadd key score member //score是可以重復的,添加key的時候指定分數 zcard key //計算成員個數 zscore key member //計算某個成員的分數 zrank key member //計算成員排名,從低到高 zrevrank key member //計算成員排名,從高到低 zrem key member [member...] //刪除成員 zincrby key increnment member //增加成員的分數 zrange key start end [withscores] //從低到高返回指定排名的分數 zrevrange key start end [withscores] //從高到低返回zrangebyscore key min max [withscores] [limit offset count] //按照分數從低到高返回 zrevrange score key min max [withscores] [limit offset count] //按照分數從高到低返回成員withscore 代表返回的時候帶上成員的分數...還有求交集,并集等操作3.應用場景
在集合類型的場景上加入排序就是有序集合的應用場景了。
(1)根據好友的“親密度”排序顯示好友列表。
// 用元素的分數(score)表示與好友的親密度 zadd user:kobe 80 james 90 wade 85 melo 90 paul// 根據“親密度”給好友排序 zrevrange user:kobe 0 -1/*** 輸出:* 1) "wade"* 2) "paul"* 3) "melo"* 4) "james"*/// 增加好友的親密度 zincrby user:kobe 15 james// 再次根據“親密度”給好友排序 zrevrange user:kobe 0 -1/*** 輸出:* 1) "james"* 2) "wade"* 3) "paul"* 2) "melo"*///類似的需求還出現在根據文章的閱讀量或點贊量對文章列表排序(2)排行榜
實效性
從排行榜的實效性上劃分,主要分為:
-
實時榜:基于當前一段時間內數據的實時更新,進行排行。例如:當前一小時內游戲熱度實時榜,當前一小時內明星送花實時榜等
-
歷史榜:基于歷史一段周期內的數據,進行排行。例如:日榜(今天看昨天的),周榜(上一周的),月榜(上個月的),年榜(上一年的)
業務數據類型
從需要排行的數據類型上劃分,主要分為:
-
單類型數據排行榜:是指需要排行的主體不需要區分類型,例如,所有用戶積分排行,所有公貢獻值排行,所有游戲熱度排行等
-
多類型(復合類型)數據排行榜:是指需要排行的主體在排行中要求有類型上的區分,例如:競技類游戲熱度排行、體育類游戲熱度排行、MOBA類游戲操作性排行、角色/回合/卡牌三類游戲熱度排行等
展示唯度
從榜單的最終展示唯度上劃分,主要分為:
-
單唯度:是指選擇展示的排行榜就是基于一個唯度下的排行,例如前面提到的MOBA類游戲操作性排行榜,就僅展示所有MOBA類游戲按操作性的評分排行
-
多唯度:是指選擇展示的排行榜還有多種唯度供用戶選擇,仍然以前面的MOBA類游戲為例,唯度除了操作性,還有音效評分排行,難易度評分排行,畫面評分排行等。
展示數據量
從需要展示的數據量上劃分,主要分為:
-
topN數據:只要求展示topN條排行紀錄,例如:最火MOBA游戲top20
-
全量數據:要求展示所有數據的排行,例如:所有用戶的積分排行
?
?
?
總結
以上是生活随笔為你收集整理的sorted set 数据类型的应用场景的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: set 数据类型的应用场景
- 下一篇: 如何去设计硬件与程序之间的通信协议