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

Redis初识第七期---ZSet的命令和应用场景

ZSet相较于Set来说,它又是有序的,这个有序指的就是我们通常意义上的有序了,ZSet内部中是按照升序来排序的。

排序规则:ZSet相较于Set来说,它内部引入了一个新的属性:分数(Score),浮点类型,对于每一个member都有一个Score与之对应,member是要求唯一的,但是Score是可以重复的,排序的依据就是Score,如果Score重复的话,则按照字典序进行排序。

命令

普通操作

1.Zadd

完整语法:

Zadd key [NX|XX]   [GT|LT]   [ch] [Incr]  Score member  [Score  member.....]

作用是添加元素。时间复杂度为O(logn)。

参数:

[NX|XX]:NX表示只添加不更新,如果已经存在,即使Score不同也会添加失败。XX:表示只更新,不添加。默认情况为不存在就添加,存在的话就更新分数。

[GT|LT]:GT表示比原来Score大才更新,LT就表示比原来Score分数小才更新。

[CH]:不写CH返回的是添加的个数,如果写上CH则将更新的也包含在内。主要适用于XX,因为它只更新不添加,返回值默认为0。

[Incr]:对元素进行加减操作,默认为加,减的话使用负数来实现,使用后后面就只能指定一个Score和member了。(不能同时对多组member进行操作)。

2.Zrange

和List中Lrange类似,可以查询一对下标构成的空间,但是Zrange可以在下标后加上WithScores来同时查询member和Score,时间复杂度为O(logn);

3.Zcard 

Zcard key

获取key中的元素个数。

4.ZCount key min max

获取Score在min和max中的元素个数,值得注意的是Max和Min为闭区间,如果想要为开区间可以在前面加上(,即(min (max,同时Redis引入了两个特殊值:inf:表示无穷大,-inf:表示无穷小。

5.Zrevrange

用法和Zrange一样,只不过是逆序返回罢了。

阻塞版本命令

6.ZpopMax

ZpopMax key [count]

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

7.BzpopMax

BzpopMax key[key....] timeout

ZpopMax的阻塞版本,提供timeout来指定最长阻塞时间,支持小数,单位s。但是和ZpopMax不同的是不可以指定删除的个数。

8.ZpopMin

ZpopMin key [count]

删除Zset中Score最小的count个元素。

9.BzpopMin key[key...] timeout

和BzpopMax用法一样,这里不做过多赘述。

值得注意的是以上操作的时间复杂度都是O(logn)(内部编码为ziplist时为O(N)),这是因为SkipList没有维护头部指针和尾部指针,即使是头/尾删,仍然需要遍历。

10.Zrank key member

时间复杂度为O(logN)。

作用是获取key中member的排名(下标)。

11.ZrevRank key member

也是获取member的排名,只不过是逆序(降序)。

12.Zscore key member

查找指定元素的分数,但是时间复杂度为O(1)!,这是因为Redis同时维护了一个哈希表,使得查找复杂度为O(1)。

13.Zrem key member [member....]

删除指定的元素,返回删除的个数。

14.ZremRangeByRank key start stop 

范围删除,把从start到stop之间的全删了(根据下标)。

15.ZremRangeByScore key  min max

指定一个删除区间,通过分数来描述。

16.ZincrBy key increment member

给指定的member增加increment(支持小数)。

集合间操作

Zinter,Zunion,Zdiff从Redis6.2才支持,用法和ZinterStore,ZunionStore类似,这里不过多解释了。

17.ZinterStore

ZinterStore destination numbers  key [key.....] [weights....] [Aggregate <Sum|Min|Max>]

求并集并存储到destination中。

numbers:指定有多少个key参与运算,避免key和后面的参数混肴。

weights:权重,就是每个key中Score要乘的倍数,如果要使用的话,前面必须要加上weights关键字。

Aggregate <Sum|Min|Max>:Sum表示取分数之和(默认情况),Min表示取分数最小的,Max表示取分数最大的,使用前要加上Aggregate关键字。

18.ZunionStore

ZunionStore destination bunbers key[key....] [weights...] Aggregate <Sum|Min|Max>]

用法和ZinterStore一样,只不过求的是合集罢了。

Zset内部编码

1.ziplist

如果有序集合的元素比较少而且单个元素的体积较小,使用ziplist存储。

2.skipList

复杂的链表,一个节点上有很多的指针,让查询时间更短(O(logn))。

Zset应用场景

1.最常见的场景,排行榜系统。

2.还可以使用集合操作来对热点信息进行排序,例如微博热度可以使用加权对评论,转发,浏览来进行加权,得出一个分数。

http://www.lryc.cn/news/578073.html

相关文章:

  • VRR(可变刷新率)和QMS(快速媒体切换)
  • 集群【运维】麒麟V10挂载本地yum源
  • OpenCV计算机视觉实战(14)——直方图均衡化
  • 【期末分布式】分布式的期末考试资料大题整理
  • UI前端大数据处理挑战与对策:保障数据安全与隐私
  • 【知识】RPC和gRPC
  • Reactor操作符的共享与复用
  • Excel数据匹配合并工具
  • Linux 系统管理:自动化运维与容器化部署
  • 2025年数字信号、计算机通信与软件工程国际会议(DSCCSE 2025)
  • postman接口测试全部流程
  • Git 简介安装教程
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的校园服务平台管理系统,推荐!
  • Fiddler中文版抓包工具如何帮助前端开发者高效调试
  • 我的第一个开源项目:用Python搭建轻量级静态网页服务器—— 零基础也能实现的Web开发初体验
  • 鸿蒙应用开发:ArkTS中接口的声明和使用
  • SQL优化(插入、主键、order by、group by)
  • 关于 java:8. Java 内存模型与 JVM 基础
  • ClickHouse 部署
  • RK3568平台开发系列讲解:WIFI的调试手段
  • 重构老项目不再“踩雷”:飞算JavaAI的本地化智能合并实战
  • 企业自建云概念解读|私有云、专有云、混合云、分布式云、企业云
  • Windows桌面上的「了解此图片」怎么弄掉?
  • Tailwind CSS 配置正确,也没有报错,但是样式没有生效(解决~)
  • 如何用废弃电脑变成服务器搭建web网站(公网访问零成本)
  • 成像光谱遥感技术中的AI革命:ChatGPT在遥感领域中的应用
  • 【MySQL基础】MySQL索引全面解析:从原理到实践
  • vscode ssh远程连接ubuntu20失败的解决方法
  • 第9篇:Gin配置管理-Viper的实战使用
  • 批量生成文件名6