Sort Set排序集合类型

(1)介绍
和set一样sorted set也是string类型元素的集合,
不同的是每个元素都会关联一个权。
通过权值可以有序的获取集合中的元素
【Redis缓存机制】7.SortSet排序集合类型操作_编程

该Sort Set类型适合场合:
获得热门帖子(回复量)信息:select * from message order by backnum desc linit 5;
(以上需求可以通过简单sql语句实现,但是sql语句比较耗费数据库资源)

(1)操作
zadd key score member            添加元素到集合,元素在集合中存在则更新对应score
zrem key member                  删除指定元素,1表示成功,如果元素不存在返回0
zincrby key incr member          按照incr幅度增加对应member的score值,返回score值
zrank key member                 返回指定元素在集合中的排名(下标),集合中元素是按score从小到大排序的
zrevrank key member              同上,但是集合中元素是按score从大到小排序
zrange key start end             类似lrange操作是从集合中去指定区间的元素。返回的是有序的结果
zrevrange key start end          同上,返回结果是按score逆序的
zcard key                        返回集合中元素个数
zscore key element               返回给定元素对应的score
zremrangebyrank key min max      删除集合中排名在给定区间的元素(权值从小到大排序)

(3)模拟
【Redis缓存机制】7.SortSet排序集合类型操作_编程_02
我们模拟帖子信息,将点击量比较高的帖子信息存储起来,看看是否
自动进行了排序。

我们只做一个sort set排序集合,里面只保留5个元素信息,该5个元素是回复
量最高的帖子。每个帖子被回复的时候,都有机会进入该集合里面,但是只有
回复量高的前五个帖子会存在于该集合,回复量低的就被删除。

创建一个sort set排序集合hotmessage的key,内部有5个元素:
【Redis缓存机制】7.SortSet排序集合类型操作_编程_03

然后第六个帖子的信息加入集合:
【Redis缓存机制】7.SortSet排序集合类型操作_编程_04

我们按照权值从大到小逆序排序显示一下我们的数据:
【Redis缓存机制】7.SortSet排序集合类型操作_编程_05

我们要删除回复量最低的数据(从小到大的排序后,删除区间为0到0的元素,也就是0本身)
【Redis缓存机制】7.SortSet排序集合类型操作_编程_06
可以看到之前排序权值最小的14被删除了

想查看某一个权值数据的排名(zrank从小到大,zrevrank从大到小),使用zrank指令
【Redis缓存机制】7.SortSet排序集合类型操作_编程_07

zcard指令可以返回SortSet集合中的元素个数
【Redis缓存机制】7.SortSet排序集合类型操作_编程_08

zincrby指令增加某个权值下的数值,我们给权值11的数据加200,
【Redis缓存机制】7.SortSet排序集合类型操作_编程_09
可以看到最后从大到小排行,11变成了数值最大的,排名第一了

最后,想查看某个权值对应的数据值,使用zscore就可以了:
【Redis缓存机制】7.SortSet排序集合类型操作_编程_10

总结:
关于重复元素:
Set类型:没有
List链表类型:有