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