【Redis】zset有序集合的常见命令

news2025/5/25 9:15:29

zset是一个有序集合,有着set的特点,还引入了排序。每个元素额外会有一个分数(score),元素不可重复,但是分数可以重复。排序以分数为主,如果分数相同,则按元素字典序。  

推荐启动服务器时使用该命令:redis-cli --raw 

目录

1.命令大全

2.命令介绍

3.编码方式与应用场景


1.命令大全

(1)有序集合zset的特点

  1. 命令以z开头
  2. 元素member唯一
  3. 每个member携带一个分数score
  4. 分数不唯一
  5. 元素在集合中以分数排序[元素字典序]
  6. redis默认采取升序的方式

(2)命令大全

命令含义

zadd key score member [score member … ]

添加元素
zcard key获取集合中元素个数
zscore key member
求元素分数
zrank key member
求元素序号
zrevrank key member
求元素序号(降序)
zrem key member [member ...]
移除元素
zincrby key increment member
给元素分数+n
zrange key start end [withscores]
展示区间元素
zpopmax key [count]删除并得到最大值
zpopmin key [count]删除并得到最小值
zcount key min max
返回区间分数的元素个数
zremrangebyrank key start end
按升序下标,删除指定范围中的元素
zremrangebyscore key min max
按升序分数,删除指定分数中的元素
zinterstore destination numkeys key [key ...]
求交集并存到集合中
zunionstore destination numkeys key [key ...]
求并集并存在集合中
2.命令介绍

(1)zadd

1)语法:zadd key   [NX | XX]   [GT | LT]   [CH]  [INCR] score member [score member … ]

2)含义:添加k-v,一次性也可以同时添加多个

3)时间复杂度:O(log(N))

4)返回值:本次添加成功的元素个数

  • 默认版本使用

成功添加三个元素,每个member携带一个score

默认下的含义:一次性可添加多个元素,返回添加成功的元素个数;如果当前的member不存在,就会添加新的;如果member存在,就会更新分数。

  • [NX | XX] 讲解

表示可选项,使用zadd命令时可选可不选

NX:如果member存在,直接返回;如果member不存在,就会添加新元素(不会更新元素)

XX:如果member存在,就会更新分数score;如果不存在,就会返回(不会新增元素)

 XX:

  • [GT | LT] 讲解

这两个选项只存在于低版本的redis中。表示可选项,使用zadd命令时可选可不选。在更新分数时使用,默认不选都都可以更新。

GT:属于greater than的缩写。如果更新的分数比原始分数高,才能更新成功。否则不更新

LT:属于less than的缩写。如果更新的分数比元素分数低,才能更新成功。

  • [CH] 详解

表示可选项,使用zadd命令时可选可不选。不选选项时,会返回新增成功个数,不会返回修改成功个数

含义:加上改选项后,更新成功member的score后,也会返回更新成功元素的个数。

  • [INCR]

表示可选项,使用zadd命令时可选可不选

含义:加上该选项就类似zincrby的效果,可以给member的分数加上指定的分数,此时只能指定一个元素和分数。

(2)zcard

1)语法:zcard key

2)含义:获取key对应zset集合中的元素个数

3)时间复杂度:O(1)

4)返回值:zset内的元素个数

(3)zcount

1)语法:zcount key min max

2)含义:返回分数在min和max之间的元素个数。默认包含分数为min和max的,如果不需要包含,可以加上(。max和min可以为浮点数、inf(无穷大)和-inf(负无穷大)

3)时间复杂度:O(log(N))

4)返回值:满足条件的元素个数

5)遍历方式:找到max和min分数对应的下标,然后相减得到

正常包含:

不包含:加上左括号

(4)zrange

1)语法:zrange key start stop [withscores]

2)含义:返回指定区间中的元素,按照升序输出。下标同样支持负数,带上可选项withscores表示把member对应的分数也输出

3)时间复杂度:O(log(N)+M)

4)返回值:区间内的元素列表

不加可选项:

加上可选项:

(5)zrevrange(不推荐)

1)语法:zrevrange key start top [withscores]

2)含义:返回指定区间中的元素,按照降序输出。下标同样支持负数,带上可选项withscores表示把member对应的分数也输出。在版本6.2.0后已废弃

3)时间复杂度:O(log(N)+M)

4)返回值:区间内的元素列表

(6)zrangebyscore(不推荐)

1)语法:zrangebysocre key min max [withscores]

2)含义:返回分数在min和max之间的元素(member),默认包含min和max,可以通过(排序min和max。在版本6.2.0后已废弃。可以使用zcount代替

3)时间复杂度:O(log(N)+M)

4)返回值:区间内的元素列表

(7)zpopmax

1)语法:zpopmax key [count]

2)含义:删除并返回分数最高的count个元素。存在相同分数,则删除元素字典序在前面那个

3)时间复杂度:O (log(N) * M),M为count,N为zset中元素个数

4)返回值:分数和元素列表

(8)bzpopmax

1)语法:bzpopmax key [key … ] timeout

2)含义:zpopmax的阻塞版本

3)时间复杂度:O(log(N)),只在key中删除一次元素

4)返回值:元素列表


(9)zpopmin

1)语法:zpopmin key [count]

2)含义:删除并返回分数最低的count个元素

3)时间复杂度:O (log(N) * M),M为count,N为zset中元素个数

4)返回值:元素列表

(10)bzpopmin

1)语法:zpopmin key [key … ] timeout

2)含义:zpopmin 的阻塞版本

3)时间复杂度:O(log(N)),只在key中删除一次元素

4)返回值:元素列表


(11)zrank

1)语法:zrank key member

2)含义:返回指定元素的排序,按照升序输出,下标从0开始。有效版本2.0.0后

3)时间复杂度:O(log(N))

4)返回值:元素排名

(12)zrevrank

1)语法:zrevrank key member

2)含义:返回指定元素的排名,按照降序

3)时间复杂度:O(log(N))

4)返回值:元素排名

(13)zscore

1)语法:zscore key member

2)含义:返回指定元素的分数

3)时间复杂度:O(1)

4)返回值:元素的分数

(14) zrem

1)语法:zrem key member [mmeber]

2)含义:删除指定的元素

3)时间复杂度:O(M * log(N)),N是zset集合中的个数,M是删除的个数

4)返回值:成功删除的个数

(15)zremrangebyrank

1)语法:zremrangebyrank key start stop

2)含义:按照升序下标,删除指定范围中的元素,左右闭

3)时间复杂度:O(log(N)+M)

4)返回值:本次操作删除的元素个数

(16)zremrangebyscore

1)语法:zremrangebyscore key min max

2)含义:按照分数升序删除指定范围的元素

3)时间复杂度:O(log(N)+M)

4)返回值:本次操作删除的元素个数

(17)zincrby

1)语法:zincrby key increment member

2)含义:为指定元素的分数添加指定的分数值,支持正数、负数、浮点数

3)时间复杂度:O(log(N))

4)返回值:增加后元素的分数

(18)zinterstore

求交集(变少) 

1)语法:zinterstore destination numkeys key [key … ] [weights weight weight … ]  [aggregate <sum | min | max>]

2)含义:求交集,并且把交集的结果放入指定的key中

3)时间复杂度:O(N * K) + O(M * log(M))

4)返回值:目标集合中的元素个数

  • 基本版本--不加任何选项

destination为目的集合;numkeys为求交集的集合个数,需要在前面指定;默认版本求交集分数是相加

  • [weights weight weight … ] -- 权重选项

第一个weights表示权重,为关键字;后续的weight代表每个集合所占的权重比,用weight乘以集合中对应的分数为结果分数

求交集后:

这里的权重并不是求百分比,而是直接乘上的系数。

  • [aggregate <sum | min | max>] -- 分数结果求法

不加上默认选项为求和,aggregate为关键字

sum: 结果分数求和;min: 结果分数求最小值;max: 结果分数求最大值

(19)zunionstore

求并集(变多)

1)语法:zunionstore destination numkeys key [key … ] [weights weight weight … ]  [aggregate <sum | min | max>]

2)含义:求并集并把结果放入指定的key中

3)时间复杂度:O(n) + O(m * log(m))

4)返回值:目标集合中的元素个数

这里是求并集,参数语法和上面求交集一致,不额外讲解


3.编码方式与应用场景

(1)编码方式

  • ziplist(压缩列表)

定义:当有序集合中的元素个数小于配置项时(默认128个),并且每个元素的值都小于配置项(默认64字节)时,zset内部就会采用ziplist来实现

  • skiplist(跳表)

定义:不满足ziplist的条件就会采取skiplist的编码方式,也就是跳表

(2)应用场景 -- 排行榜系统

原因:zset是一个有序集合且默认为升序,刚好就符合排行榜的要求;另外,如果作为综合热榜,也可以根据求交集(指定权重比)来完成;而且排名的实时变化也很好改变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2213994.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

并发编程-CompletableFuture

并发编程-CompletableFuture 本篇主要讲述 JDK1.8 里面 CompletableFuture 的原理与源码分析。这一篇暂且作为整个章节的最后一篇(若有时间继承增加关于并发编程的其他内容)。闲话少叙&#xff0c;进入正题。在深入了解 CompletableFuture 之前我们先要看一下 Future&Call…

给自己气笑了

正如你所见这是AC代码&#xff0c;我也一直坚信&#xff0c;我调了一个早上一直给我报语法错误 我今天一直在想这个问题&#xff0c;为什么会语法错误&#xff0c;我想了很多很多&#xff0c;军训的时候我一直在想这个事情。 因为我坚信我的逻辑是正确的&#xff0c;不调出来…

JFinalcms代码审计

JFinalCms是开源免费的JAVA企业网站开发建设管理系统&#xff0c;极速开发&#xff0c;动态添加字段&#xff0c;自定义标签&#xff0c;动态创建数据库表并crud数据&#xff0c;数据库备份、还原&#xff0c;动态添加站点(多站点功能)&#xff0c;一键生成模板代码。 环境布置…

管家婆-本地化-重装数据库导入数据库mdf——未来之窗数据恢复专家

一、进入数据库管理软件 二、数据附加 三、选择文件mdf 四、错误处理 关闭管家婆和数据库服务重启 五、确定文件 六、确认附加 七、替换管家婆账套 八、阿雪技术观 拥抱开源与共享&#xff0c;见证科技进步奇迹&#xff0c;畅享人类幸福时光&#xff01; 让我们积极投身于技术…

boost函数对象

文章目录 bindref函数FunctionLambda 本章介绍的是函数对象&#xff0c;可能称为’高阶函数’更为适合。 它实际上是指那些可以被传入到其它函数或是从其它函数返回的一类函数。 在C中高阶函数是被实现为函数对象的&#xff0c;所以这个标题还是有意义的。 bind 和C中的 std::…

使用Jenkins部署项目

部署中的痛点 为什么要用Jenkins&#xff1f;我说下我以前开发的痛点&#xff0c;在一些中小型企业&#xff0c;每次开发一个项目完成后&#xff0c;需要打包部署&#xff0c;可能没有专门的运维人员&#xff0c;只能开发人员去把项目打成一个exe包&#xff0c;可能这个项目已…

淘宝图片搜索商品数据api接口对接详细的描述和解释

淘宝图片搜索商品数据接口是一项高级的API服务&#xff0c;它允许用户通过上传图片来搜索淘宝上的商品。这一功能依托于先进的图像识别技术&#xff0c;通过复杂的算法对上传的图片进行分析和处理&#xff0c;从而找到与图片相似的商品。以下是对该接口的详细描述和解释&#x…

Java避坑案例 - 忽略线程重用导致信息错乱

文章目录 Pre导读问题背景问题重现存在Bug的代码BUG现象 问题分析解决方案修正后的代码修正后的现象 ThreadLocal 的正确使用小结 Pre 并发编程-11线程安全策略之线程封闭 Spring JDBC-Spring事务管理之ThreadLocal基础知识 每日一博 - ThreadLocal VS InheritableThreadLoc…

忘记7-zip文件7-zip文件,还可以解压zip文件吗?

文件压缩与解压已成为我们日常处理数据和存储信息的常规操作。7-Zip&#xff0c;作为一款开源且功能强大的文件压缩工具&#xff0c;凭借其高压缩率、支持多种格式以及免费使用的特点&#xff0c;赢得了广大用户的青睐。然而&#xff0c;出于保护文件内容安全的考虑&#xff0c…

echart 采坑记录

1、刷新数据的时候使用setOption myChart.setOption(option,true); 第二个参数为true才会刷新数据 2、react引入ehcart&#xff0c;

[C++] 红黑树的实现:原理与底层解析

文章目录 [toc] 红黑树的概念红黑树的规则红黑树如何确保最长路径不超过最短路径的2倍红黑树规则最短路径与最长路径的分析最短路径&#xff1a;全黑路径最长路径&#xff1a;红黑交替路径 结论&#xff1a;红黑树的平衡性如何保障操作效率 红黑树的实现红黑树的节点结构红黑树…

【性能测试】jmeter通过定时器来模拟接口的动态请求时机

在 Apache JMeter 中使用定时器组件来模拟真实用户行为是非常重要的&#xff0c;因为这有助于确保你的性能测试结果更加贴近实际情况。 1. 固定定时器&#xff08;Constant Timer&#xff09; 这是最基础的定时器&#xff0c;用于在每个样本之间增加固定的时间延迟。然而&…

OpenCV-物体跟踪

文章目录 一、物体跟踪的定义二、OpenCV中的物体跟踪算法三、OpenCV物体跟踪的实现步骤四、代码实现五、注意事项 OpenCV是一个开源的计算机视觉和机器学习软件库&#xff0c;它提供了丰富的功能来实现物体跟踪。以下是对OpenCV中物体跟踪的详细解释&#xff1a; 一、物体跟踪的…

微服务架构是如何运作的?

在当今的软件架构领域&#xff0c;微服务架构以其灵活性、可扩展性和高可用性等优势&#xff0c;受到了越来越多企业和开发者的青睐。那么&#xff0c;微服务架构究竟是如何运作的呢&#xff1f;让我们一起来深入了解。 一、微服务架构的基本概念 微服务架构是一种将单个应用…

QT开发--网络编程

第十七章 QT网络编程 Qt Network模块用于TCP/IP编程&#xff0c;提供HTTP请求、cookies、DNS等功能的C类。 使用需在pro文件中添加“QT network”。 tcp通信流程图 17.1 QHostInfo QHostInfo类用于查找主机名与IP地址的关联。它提供两种查找方式&#xff1a; 1、异步查找&…

windows10创建系统账户

方式一: .a.点击 windows 图标->设置 .b.点击账户 .c.点击其他账户->将其他人添加到这台电脑->弹出对话框 .d.选中用户->右键->新用户->输入用户名和密码->创建 如下创建完成 方式二&#xff1a; windows R 输入lusrmgr.msc 后续操作步骤同上。 修改用…

YOLO11改进|SPPF篇|引入FocalModulation特征金字塔

目录 一、【FocalModulation】特征金字塔1.1【FocalModulation】特征金字塔介绍1.2【FocalModulation】核心代码二、添加【FocalModulation】特征金字塔2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【FocalModulation】特征金字塔 1.1【…

Linux网络命令:用于配置防火墙规则的一个用户友好的工具ufw详解

目录 一、概述 二、安装 UFW 三、启动、重启和关闭 UFW 1、启动 2、关闭UFW 3、 重启 UFW 四、查看 UFW 状态 五、UFW 基本命令 1. 允许端口 &#xff08;1&#xff09;单个 TCP 端口 &#xff08;2&#xff09;允许单个 UDP 端口 &#xff08;3&#xff0…

MySQL增删改进阶

目录 1.数据库约束 1.1约束类型 1.2 not null约束 1.3 unique&#xff1a;唯一约束 1.4 default&#xff1a;默认约束 1.5 primary key&#xff1a;主键约束 1.6 foreign key:外键约束 1.7 check约束&#xff08;了解&#xff09; 2.表的设计 3.新增&#xff08;进阶&…

CUDA 运行时GPU信息查询

cuda 官网文档名&#xff1a;CUDA_Runtime_API 运行时API查询GPU信息 调用 cudaDeviceProp prop; cudaGetDeviceProperties(&prop, device_id) 定义 由此可见&#xff0c;只能在主机上调用。 #include <cuda_runtime.h>#include <iostream> #include <…