您的位置:首页 > 数据库 > Redis

【Redis缓存机制】7.SortSet排序集合类型操作

2017-09-06 00:24 495 查看
Sort Set排序集合类型

(1)介绍
和set一样sorted set也是string类型元素的集合,
不同的是每个元素都会关联一个权。
通过权值可以有序的获取集合中的元素



该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)模拟



我们模拟帖子信息,将点击量比较高的帖子信息存储起来,看看是否
自动进行了排序。

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

创建一个sort set排序集合hotmessage的key,内部有5个元素:



然后第六个帖子的信息加入集合:



我们按照权值从大到小逆序排序显示一下我们的数据:



我们要删除回复量最低的数据(从小到大的排序后,删除区间为0到0的元素,也就是0本身)



可以看到之前排序权值最小的14被删除了

想查看某一个权值数据的排名(zrank从小到大,zrevrank从大到小),使用zrank指令



zcard指令可以返回SortSet集合中的元素个数



zincrby指令增加某个权值下的数值,我们给权值11的数据加200,



可以看到最后从大到小排行,11变成了数值最大的,排名第一了

最后,想查看某个权值对应的数据值,使用zscore就可以了:



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

List链表类型:有

Sort Set类型:没有

转载请注明出处:http://blog.csdn.net/acmman/article/details/53301535
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: