1 特点
#有一个分值字段,来保证顺序
key score value
user:ranking 1 lds1
user:ranking 99 lds2
user:ranking 88 lds3
zadd user:ranking 1 lds1 99 lds2 88 lds3
#集合和有序集合对比
集合:无重复元素,无序,element
有序集合:无重复元素,有序,element+score
#列表和有序集合对比
列表:可以重复,有序,element
有序集合:无重复元素,有序,element+score
2 API使用
zadd key score element #score可以重复,可以多个同时添加,element不能重复 o(logN)
zrem key element #删除元素,可以多个同时删除 o(1)
zscore key element #获取元素的分数 o(1)
zincrby key increment element #增加或减少元素的分数,increment是增加多少,减少用负数 o(1)
zcard key #返回元素总个数 o(1)
zrank key element #返回element元素的排名(从小到大排)
zrange key 0 -1 #返回排名,不带分数 o(log(n)+m) n是元素个数,m是要获取的值
zrange key 0 -1 withscores #返回排名,带分数
zrangebyscore key minScore maxScore #返回指定分数范围内的升序元素 o(log(n)+m) n是元素个数,m是要获取的值
zrangebyscore user:ranking 90 210 withscores #获取90分到210分的元素
zcount key minScore maxScore #返回有序集合内在指定分数范围内的个数 o(log(n)+m)
zremrangebyrank key start end #删除指定排名内的升序元素 o(log(n)+m)
zremrangebyrank user:1:rangking 1 2 #删除升序排名中1到2的元素
zremrangebyscore key minScore maxScore #删除指定分数内的升序元素 o(log(n)+m)
zremrangebyscore user:1:ranking 90 210 #删除分数90到210之间的元素
3 实战
排行榜:音乐排行榜,销售榜,关注榜,游戏排行榜
4 其他操作
zrevrank key element #返回element元素的排名(从大到小排)
zrevrank user:ranking lds1
zrevrange #从高到低排序取一定范围
ZREVRANGe user:ranking 0 2 # 取
1) "lds4" # 加了一个 lds4 分数100
2) "lds2"
3) "lds3"
zrevrangebyscore #返回指定分数范围内的降序元素
zinterstore #对两个有序集合交集
zunionstore #对两个有序集合求并集
5 总结
| 操作类型 | 命令 |
|---|---|
| 基本操作 | zadd/ zrem/ zcard/ zincrby/ zscore |
| 范围操作 | zrange/ zrangebyscore/ zcount/ zremrangebyrank |
| 集合操作 | zunionstore/ zinterstore |
浙公网安备 33010602011771号