Redis数据结构(六)

Redis数据结构(Sort-set)(游戏排名和微博热点话题排名上应用):
特点:可存储有序但不重复的数据,根据分数指定存储顺序

1 Sort-set和Set的区别:
(1)sort的每个成员都是以一个分数的形式在redis中存储的,redis通过分数对集合中的元素进行从小到大的排序。
(2)成员是唯一的,但是分数是可以重复的。
(3)删除增加,更新一个成员都是非常快速的。
(4)时间复杂度为集合中成员个数的一个对数
2 Sort-set中的成员在集合中的位置是有序的:

存储Sort-set常用命令:
(1)添加元素
zadd 列名 [分数 值]...
zadd mysort 80 张三 90 里斯 100 龙舞
注:如果分数已存在,会用新的分数替换原有的分数

(2)获得元素
zscore mysort 张三
查分数:zscore 列名 值
zscore mysort 张三
查数量:zcard 列名
zcard mysort
(3)删除元素
单删:zrem 列名 值...;范围删除:zremrangebyrank 列名 [begin,end]
zrem mysort 张三 里斯
(4)范围查询
升序查值:zrange 列名 [begin,end] <withscores>(两者可为正负数,负数则从反方向开始计数,正数从0开始,负数从-1开始)(withscores带分数,可选项)
zrange mysort 0 -1
zrange mysort 0 -1 withscores 由小到大排序

降序查值:zrevrange 列名 [begin,end] <withscores>(两者可为正负数,负数则从反方向开始计数,正数从0开始,负数从-1开始)(withscores带分数,可选项)
zrevrange mysort 0 -1
zrevrange mysort 0 -1 withscores 由大到小排序

排名范围删除
zremrangebyrank mysort 0 4
按照分数删除
zremrangebyscore mysort 80 100

(5)扩展名令
返回某个范围的成员,并按照由低到高排序
分数查值:zrangebyscore 列名 [begin,end] <withscores>
zrangebyscore mysort 0 100 withscores


分页查值:zrangebyscore 列名 [begin,end] <withscores limit [begin,end]>
zrangebyscore mysort 0 100 withscores limit 0 2

设置指定成员,增加的分数
zincrby mysort 3 里斯
查看下
zscore mysort 里斯

获取分数在某个之间的成员的个数
zcount mysort 80 90

使用场景
(1)如大型在线游戏积分排行榜
(2)构建索引数据

原文地址:https://www.cnblogs.com/liuyangfirst/p/7099567.html