目录

Redis-zset类型

Redis–zset类型


一、引言

本篇文章我们就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内部实际用的就是升序排序的

https://i-blog.csdnimg.cn/direct/9c40c1fcc4544eb0836c8fea4cd8d122.png

2.zrange,zrevrange,zrangebyscore

zrange:查看元素的详情

https://i-blog.csdnimg.cn/direct/0c996555fb454a9a9fba686ab2cb929c.png

https://i-blog.csdnimg.cn/direct/fd8b320587a44e479d9ec94fb88dae22.png

zrevrange:默认是升序排序,使用zrevrange变成降序排序

https://i-blog.csdnimg.cn/direct/7ee3d8faad19417fbe2c40477cfde112.png

zrangebyscore:按照分数查找元素

https://i-blog.csdnimg.cn/direct/b4b96d2f96d1417a8c6abaeb2f7426a1.png

3.zcard,zcount

zcard:获取元素个数  时间复杂度:O(1)

https://i-blog.csdnimg.cn/direct/0469aa009e80462dbfd6cf3bd7c442ee.png

zcount:返回分数在min和max之间的元素个数  时间复杂度:O(logN)

https://i-blog.csdnimg.cn/direct/a02201d995eb4a08ba3a1e30a6944ef1.png

4.zpopmax,bzpopmax,zpopmin,bzpopmin

zpopmax:删除并返回分数最高的元素   时间复杂度:O(logN * M)

https://i-blog.csdnimg.cn/direct/3a0a85b922b84ffc88ff1ac2f9a15d33.png

bzpopmax:阻塞版本的zpopmax,可以设置超时时间, 没有元素才阻塞 。时间复杂度:O(logN)

zpopmin:删除并返回分数最低的元素

https://i-blog.csdnimg.cn/direct/6304248c0c544f2794c9fd2c1170e079.png

bzpopmin:阻塞版本的zpopmin,可以设置超时时间, 没有元素才阻塞 。时间复杂度:O(logN)

5.zrank,zrevrank,zscore

zrank:返回指定元素的排名,升序   时间复杂度:O(logN)

https://i-blog.csdnimg.cn/direct/9d33fcbcd0884b9aa7ed17563f2c8733.png

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

https://i-blog.csdnimg.cn/direct/85b8f7db8b2041d99d55a643d531099b.png

zscore:获取元素对应的分数   时间复杂度:O(1)

https://i-blog.csdnimg.cn/direct/3d7ace1e6e944ceb9fc08ddc60fa46b6.png

6.zrem,zremrangebyrank,zremrangebyscore

zrem:删除元素       时间复杂度:O(logN * M)

https://i-blog.csdnimg.cn/direct/7312acf160934664854dda2aebccc234.png

zremrangebyrank:范围删除

https://i-blog.csdnimg.cn/direct/84a7ba2e93c2404eb3854c4d09aea0bb.png

zremrangebyscore:根据分数删除

https://i-blog.csdnimg.cn/direct/0a9170561f5e4d859fb629ff51a3bd05.png

7.zincrby

zincrby:增加分数   返回增加之后的分数值

https://i-blog.csdnimg.cn/direct/008a51be32664a1e914762a9fbd8e421.png

8.zinterstore

zinterscore:求交集,将结果保存到另一个key中   时间复杂度:O(NK)+O(Mlog(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类型的相关命令,内部编码以及应用场景,下一篇文章咱们将补充一些其他不常见的类型,感谢观看!