特點
-- 元素不可重複
-- 元素可以排序 (它給每個元素設置一個分數(score)作爲排序的依據。 )
列表、集合、有序集合的異同點
數據結構 | 是否允許重複元素 | 是否有序 | 有序實現方式 | 應用場景 |
---|---|---|---|---|
列表 | 是 | 是 | 索引下標 | 消息隊列、文章列表、時間軸 |
集合 | 否 | 否 | 無 | 標籤、抽獎、社交 |
有序集合 | 否 | 是 | 分值(score) | 排行榜、社交 |
命令
集合內
- 添加成員
zadd key score member [score member ...]
有序集合相比集合提供了排序字段score
, 但也產生了代價,zadd的時間複雜度爲O(log(n)),sadd爲O(1)。 - 計算成員個數
zcard key
- 計算某個成員的分數
zscore key member
- 計算成員的排名
zrank key member
zrevrank key member
- 刪除成員
zrem key member
- 增加成員分數
zincrby key increment member
- 返回指定排名範圍的成員
zrange key start end [withscores]
zrevrange key start end [withscores]
- 返回指定分數範圍的成員
zrangebyscore key min max [withscores] [limit offset count]
zrevrangebyscore key max min [withscores] [limit offset count]
同時 min 和 max 還支持開區間(小括號)和閉區間(中括號),-inf 和
+inf 分表代表無限小和無限大。 - 返回指定分數範圍成員個數
zcount key min max
- 刪除指定排名內的升序元素
zremrangebyrank key start end
- 刪除指定分數範圍內成員
zremrangebyscore key min max
集合間的操作
zadd user:ranking:1 1 kris 91 mike 200 frank 220 tim 250 martin 251 tom
zadd user:ranking:2 8 james 77 mike 625 martin 888 tom
- 交集
- 並集
內部編碼
- ziplist(壓縮列表)
- skiplist (跳躍表)
使用場景
- 添加用戶贊數
- 取消用戶贊數
- 展示獲取用戶贊數最多的十個用戶
- 展示用戶信息及用戶分數