Redis : Zset有序集合

Zset

有序集合中的每个元素都有⼀个唯⼀的浮点类型的分数(score)与之关联,使得有序集合中的元素一直是有序的

Zset的排序规则

给Zset的member引入了一个属性分数(score)每个member都会安排一个分数,进行排序的时候,都是按照此处的分数大小进行升序或者降序进行排序的

分数相同,按照元素自身的字符串的字典序来排序

分数不同,按照分数来进行排序 

Zset中默认是按照升序进行排序的

List,Set,Zset的异同点

数据结构

是否有重复的元素

是否有序有序的依据应用的场景
List列表索引的下标时间轴,消息队列
Set集合标签,社交
Zset有序集合分数排行榜系

普通命令

zadd 

添加或者更新指定的元素以及关联的分数到Zset中

NX:仅用于添加元素,不能更新已经存在的元素

XX:仅仅用于更新已经存在的元素,不会添加新元素

 

如果是添加新的元素,则不会添加成功

CH:返回新增元素和更新元素的数量(如果不加CH,只会返回的是新增元素的数量)

INCR:将元素加上指定的分数(类似于zincrby)

之前的Hash,Set,List添加一个元素很多的时候都是O(1),但是Zset添加元素是log(N),因为Zset在添加元素的时候需要找到其顺序,将其放到合适的位置上

zcard

获得元素的个数,返回值为元素的个数

 zcount

获得分数在某一区间的元素个数(闭区间)

如果要排除边界值,需要加上

zrange

查看有序集合的元素详情,可以指定区间

如果要查看其分数的详情,加上withscores

时间复杂度是O(log(N)+M),M则是查询区间的长度

 zrevrange

逆序查看有序集合的元素详情

zrangebyscores

根据分数来进行查询

 

zpopmax

删除并返回分数最高的count个元素

如果存在多个元素,且存在分数值相同的元素同时为最大值,也会进行删除,顺序由member字符串的字典序决定先后

zpopmin

删除并返回分数最低的count个元素

bzpopmax

zpopmax的阻塞版本

如果该元素不存在,则会进入阻塞,等待删除

在另一边的客户端进行添加该元素,则会删除成功

bzpopmin

zpopmin的阻塞版本

 

在另一边的客户端进行添加该元素,则会删除成功

zrank

查看指定元素的排名,升序

zrevrank

返回指定元素的排名,降序

zscore

返回指定元素的分数

 

zrem

删除指定的元素

 

也可以同时指定多个元素进行删除

时间复杂度为O(log(N)M) 

M为删除的个数

N为有序集合中的元素的个数

zremrangebyrank

按照下标删除指定范围内的元素(左闭右闭)

这个范围指的是下标的范围

zremrangebyscore

按照分数删除指定范围的元素(左闭右闭) 

zincrby

为指定的元素关联的分数添加指定的分数

不光会修改分数,还会移动元素的位置,使有序集合中的元素仍然使有序的

集合间的操作

有序集合间的交集操作---zinterstore

weight是用来设置权重的

默认会对两个求交集的key中都有的member中的分数求和在存入的key中

但是可以修改交集中相同成员的分数采用最小值

 

有序集合间的并集操作---zunionstore

 

在求并集的过程中,如果存在了相同的元素,则会默认对两个求并集的key中都有的member中的分数求和

跟交集的用法基本一致

内部编码

紧凑列表包listpack

节省内存空间

如果有序集合中的元素个数较小,单个元素的体积较小,则会使用listpack来存储

从 Redis 5.0 起,listpack 被引入,并逐步取代了 ziplist

skiplist跳表

如果有序集合中元素个数较多,或者单个的体积很大,则会使用skiplist来存储

使用场景

有序集合进行排行榜系统的设定:记录用户积分、游戏得分、考试成绩等,并支持实时排行

微博热榜的信息:根据搜索次数、阅读量、点击量等打分,实时更新“热度”榜单

电商平台根据优惠券的价值或者优先级来进行展示,权重越高排在越前面。

希望对大家有所帮助!!!!! 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值