Redis--zset类型
目录
一、引言
二、介绍
三、命令
1.zadd
2.zrange,zrevrange,zrangebyscore
3.zcard,zcount
4.zpopmax,bzpopmax,zpopmin,bzpopmin
5.zrank,zrevrank,zscore
6.zrem,zremrangebyrank,zremrangebyscore
7.zincrby
8.zinterstore
9.zunionstore
四、内部编码
1.ziplist(压缩列表)
2.skiplist(跳表)
五、应用场景
1.排行榜系统
2.进行加权排行
六、总结
一、引言
本篇文章我们就redis的value的类型zset类型进行简单的介绍,以及其相关命令和应用场景。
二、介绍
zset:有序集合,zset中的member引入了一个属性score,浮点类型,排序的时候就是按照分数的大小进行升序/降序的排序。
三、命令
1.zadd
zadd:往有序集合中添加元素和分数,对于有序集合来说,即可通过member来找到score,也可以通过score来找到匹配的member。
zadd key[NX|XX ] [GT | LT] [ CH ] [INCR] socre member [score member ...]
XX:更新当前存在的,不存在就操作失败
NX:添加新的,对于已经存在的就操作失败
LT:对于已经存在的,如果新的分数比当前分数小就更新
GT:对于已经存在的,如果新的分数比当前分数大就更新
CH:zadd返回的是本次添加的元素,指定这个选项之后就会包含本次更新的元素个数
INCR:对现有分数进行一个数值操作
Zset添加元素的时间复杂度是O(logN)
zset内部实际用的就是升序排序的
2.zrange,zrevrange,zrangebyscore
zrange:查看元素的详情
zrevrange:默认是升序排序,使用zrevrange变成降序排序
zrangebyscore:按照分数查找元素
3.zcard,zcount
zcard:获取元素个数 时间复杂度:O(1)
zcount:返回分数在min和max之间的元素个数 时间复杂度:O(logN)
4.zpopmax,bzpopmax,zpopmin,bzpopmin
zpopmax:删除并返回分数最高的元素 时间复杂度:O(logN * M)
bzpopmax:阻塞版本的zpopmax,可以设置超时时间,没有元素才阻塞。时间复杂度:O(logN)
zpopmin:删除并返回分数最低的元素
bzpopmin:阻塞版本的zpopmin,可以设置超时时间,没有元素才阻塞。时间复杂度:O(logN)
5.zrank,zrevrank,zscore
zrank:返回指定元素的排名,升序 时间复杂度:O(logN)
zrevrank:返回指定元素的排名,降序
zscore:获取元素对应的分数 时间复杂度:O(1)
6.zrem,zremrangebyrank,zremrangebyscore
zrem:删除元素 时间复杂度:O(logN * M)
zremrangebyrank:范围删除
zremrangebyscore:根据分数删除
7.zincrby
zincrby:增加分数 返回增加之后的分数值
8.zinterstore
zinterscore:求交集,将结果保存到另一个key中 时间复杂度:O(N*K)+O(M*log(M)) 近似看作O(M*log(M))
zinterstore dest keynums key key2 weights 2 3
9.zunionstore
和上一个命令类似,只是这个是求并集
四、内部编码
1.ziplist(压缩列表)
如果有序集合中的元素较少,或者单个元素的体积较小,此时使用ziplist进行存储
2.skiplist(跳表)
元素较多,或者元素体积较大。
跳表是一个复杂的链表 查询一个元素的时间复杂度是O(logN) 更擅长按照范围获取元素
五、应用场景
1.排行榜系统
2.进行加权排行
利用相关操作对某种特性进行加权计算再进行排行
六、总结
本篇文章,简单介绍了value的类型zset类型的相关命令,内部编码以及应用场景,下一篇文章咱们将补充一些其他不常见的类型,感谢观看!