当前位置: 首页 > news >正文

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类型的相关命令,内部编码以及应用场景,下一篇文章咱们将补充一些其他不常见的类型,感谢观看!

相关文章:

  • 使用conda将python环境打包,移植到另一个linux服务器项目中
  • IO多路转接 ——— select、poll、epoll
  • C# NX二次开发:获取模型中所有的草图并获取草图中的对象
  • PostgreSQL 多数据库集簇配置及多数据库复制方法【流程+代码实例】
  • 【操作系统安全】任务2:用户与用户组
  • 手写智能指针shared_ptr
  • 【软考网工-实践篇】DHCP 动态主机配置协议
  • springboot436-基于SpringBoot的汽车票网上预订系统(源码+数据库+纯前后端分离+部署讲解等)
  • Windsurf初体验
  • CUDA编程之OpenCV与CUDA结合使用
  • 人工智能】数据挖掘与应用题库(401-500)
  • c++介绍智能指针 十二(1)
  • python画图文字显示不全
  • win32汇编环境,网络编程入门之四
  • 奥威BI多数据源融合分析
  • (十一) 人工智能 - Python 教程 - Python元组
  • 【机器学习】主成分分析法求数据前n个主成分
  • deepseek使用记录21——脑图记录
  • 树莓科技集团董事长:第五代产业园运营模式的深度剖析与展望​
  • STM32上实现简化版的AUTOSAR DEM模块
  • 凌云县 城市建设 网站/企业网站首页
  • 网站建设营销外包公司排名/新闻源软文发布平台
  • 中国建筑集团有限公司官网招聘/优化网站排名推广
  • 免费看电影的网站是什么/百度官方版下载
  • 家装公司加盟/山东seo费用多少
  • 成品网站1688入口苹果/网络整合营销理论