redis的数据类型之-有序集合
sort set和set类型一样,也是string类型元素的集合,也没有重复的元素,不同的是sort set每个元素都会关联一个权,通过权值可以有序的获取集合中的元素
sort set的操作:
sort set类型适合场景:
获得排名最前的5个热门帖子信息(通过帖子回复量标识热门帖子),用sql的做法:select * from message order by backnum desc limit 5;但是当数据量足够大时,比如有1亿条数据,这一条sql下去就会耗费大量数据库资源,查询速度也很慢,即使在backnum(回复量)上建立索引,也是很耗费数据库资源的。如果用redis的sort set,就可以很高效地实现这一功能,就像上一个帖子里的set集合类似,可以用set sort只保存回复量最多的前五条。
假设有如下的帖子信息:
用sort set 保存帖子:切换到redis的运行目录,后台带着配置文件启动redis服务,并启动redis的操作终端:
执行命令select 1切换到第二个数据库(其他的数据类型的例子都在这个数据库里)
1,zadd key score member命令:创建sort set排序集合,添加5条数据,hotmessage表示热门帖子
2,zrevrange key start end 权值按从大到小排序,返回的是member列表,zrange key start end是权值从小到大排序。
增加第六条帖子回复,然后再按权值从大到小排序,删除权值最小的帖子回复,sort set hotmessage中保持回复量最高的5条帖子
3,zremrangebyrank key min max:删除集合中排名在指定区间的元素, 范围0 0就表示第一个元素 ,
可以看到回复量最小的id为14的帖子被删除,id为16的帖子被添加进来,这样集合里一直保存着回复量最高的5个帖子。
4,zcard key :返回集合中元素的个数
5,zscore key member:返回元素15对应的权值
6,zincrby key incr member:给元素为15的权值加100
7,zrem key member:删除指定的元素