Redis—SortedSet数据类型及其常用命令详解

news2024/11/27 8:35:30

文章目录

  • 一、Redis概述
    • SortedSet类型
      • 1 ZADD:向有序集合添加成员
      • 2 ZREM:从有序集合中移除一个或多个成员
      • 3 ZSCORE : 获取sorted set中的指定元素的score值
      • 4 ZRANK:获取sorted set 中的指定元素的排名
      • 5 ZCARD:获取sorted set中的元素个数
      • 6 ZCOUNT:统计score值在给定范围内的所有元素的个数
      • 7 ZINCRBY:让sorted set中的指定元素自增,步长为指定的increment值
      • 8 ZRANGE:按照score排序后,获取指定排名范围内的元素
      • 9 ZDIFF、ZINTER、ZUNION:求差集、交集、并集


一、Redis概述

Redis概述

在这里插入图片描述

SortedSet类型

  • Redis的SortedSet是一个可排序的set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。

  • SortedSet中的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加 hash表。

  • 数据结构——跳表详解

SortedSet具备下列特性:

  • 可排序
  • 元素不重复
  • 查询速度快

因为SortedSet的可排序特性,经常被用来实现排行榜这样的功能。


1 ZADD:向有序集合添加成员

添加一个或多个元素到sorted set ,如果已经存在则更新其score值
在这里插入图片描述
ZADD 是 Redis 中用于向有序集合添加成员的命令。

ZADD key [NX|XX] [GT|LT] [CH] [INCR] score member [score member ...]
  • key: 有序集合的键名。
  • NXXX(可选):用于指定操作的条件,NX 表示只在成员不存在时才添加,XX 表示只在成员已经存在时才添加。
  • GTLT(可选):用于指定操作的条件,GT 表示只添加比给定分数大的成员,LT 表示只添加比给定分数小的成员。
  • CH(可选):表示将返回值设置为新增成员的数量,即使是更新已经存在成员的分数。
  • INCR(可选):表示将成员的分数与给定的增量相加,而不是将成员的分数设置为给定的值。
  • score member [score member ...]: 分数和成员组成的列表,可以一次性添加多个成员。

返回值

返回值为整数,表示添加的成员数量,不包括已经存在并且分数被更新的成员。

行为说明

  • 将一个或多个成员添加到有序集合中,或者更新已经存在成员的分数。
  • 如果有序集合不存在,将会创建一个新的有序集合并添加成员。
  • 如果成员已经存在于有序集合中,它的分数将被更新。

示例

向有序集合 zset1 中添加成员 member1member2,并指定分数:

ZADD zset1 10 member1 20 member2

执行后:

  • 如果 zset1 不存在,将会被创建并添加成员。
  • 如果 member1 不存在,则添加 member1zset1 并设置分数为 10
  • 如果 member2 不存在,则添加 member2zset1 并设置分数为 20
  • 返回值为添加的成员数量,这里是 2

使用场景

  • 排行榜:用于存储和更新排行榜中的成员和分数。
  • 数据排序:在需要对数据进行排序和检索时使用。

2 ZREM:从有序集合中移除一个或多个成员

在这里插入图片描述
ZREM 是 Redis 中用于从有序集合中移除一个或多个成员的命令。

ZREM key member [member ...]
  • key: 有序集合的键名。
  • member: 要从有序集合中移除的成员。

返回值

返回整数值,表示被成功移除的成员数量。

行为说明

  • 从有序集合中移除给定的成员,如果成员不存在于有序集合中,则忽略。
  • 如果有序集合在移除成员后变为空集,将自动删除该有序集合的键。

示例

有序集合 zset1,其中包含成员 member1member2member3

ZADD zset1 10 member1 20 member2 30 member3

从有序集合 zset1 中移除成员 member2

ZREM zset1 member2

执行后:

  • zset1 中将只剩下成员 member1member3
  • 返回值为 1,表示成功移除了一个成员。

尝试移除不存在的成员 member4

ZREM zset1 member4

执行后:

  • zset1 保持不变,因为成员 member4 不存在。
  • 返回值为 0,表示没有移除任何成员。

注意事项

  • ZREM 命令是原子的,这意味着在命令执行过程中不会有其他客户端能够对该有序集合进行操作。
  • 如果有序集合在移除成员后变为空集,将自动删除该有序集合的键。

3 ZSCORE : 获取sorted set中的指定元素的score值

在这里插入图片描述
ZSCORE 是 Redis 中用于获取有序集合中指定成员的分数的命令。

ZSCORE key member
  • key: 有序集合的键名。
  • member: 要查询分数的成员。

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZSCORE myzset "one"
"1"

返回字符串形式的成员分数。如果成员不存在于有序集合中,则返回 nil

行为说明

  • 查询并返回有序集合中指定成员的分数。
  • 如果有序集合或成员不存在,将返回 nil

示例

有序集合 zset1,其中包含成员 member1member2member3,其分数分别为 102030

ZADD zset1 10 member1 20 member2 30 member3

查询 member2 的分数:

ZSCORE zset1 member2

执行后:

  • 返回值为 "20",表示 member2 的分数是 20

查询不存在的成员 member4 的分数:

ZSCORE zset1 member4

执行后:

  • 返回值为 nil,因为 member4 不存在于 zset1 中。

注意事项

  • ZSCORE 命令是只读的,不会修改有序集合的内容。
  • 返回值是字符串形式的分数,即使实际分数是一个整数。

4 ZRANK:获取sorted set 中的指定元素的排名

在这里插入图片描述
ZRANK 是 Redis 中用于获取有序集合中指定成员的排名(索引)的命令。

ZRANK key member [WITHSCORE]
  • key: 有序集合的键名。
  • member: 要查询排名的成员。
  • WITHSCORE: 可选参数,如果指定了 WITHSCORE,则返回成员的排名和分数。

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZRANK myzset "three"
(integer) 2
redis> ZRANK myzset "four"
(nil)
redis> ZRANK myzset "three" WITHSCORE
1) (integer) 2
2) "3"
redis> ZRANK myzset "four" WITHSCORE
(nil)

如果成员存在于有序集合中,返回成员的排名(从 0 开始)。如果成员不存在于有序集合中,返回 nil

如果指定了 WITHSCORE 参数,返回值将是一个包含排名和分数的数组:[排名, 分数]。

行为说明

  • 查询并返回有序集合中指定成员的排名。
  • 如果有序集合中存在多个相同分数的成员,排名按照成员的字典顺序进行排序。

示例

有序集合 zset1,其中包含成员 member1member2member3,其分数分别为 102030

ZADD zset1 10 member1 20 member2 30 member3

查询 member2 的排名:

ZRANK zset1 member2

执行后:

  • 返回值为 1,表示 member2 在有序集合中的排名是第二位(索引从 0 开始)。

查询 member4 的排名:

ZRANK zset1 member4

执行后:

  • 返回值为 nil,因为 member4 不存在于 zset1 中。

使用 WITHSCORE 参数查询 member2 的排名和分数:

ZRANK zset1 member2 WITHSCORE

执行后:

  • 返回值为 ["1", "20"],表示 member2 的排名是第二位,分数是 20

注意事项

  • ZRANK 命令只读,不会修改有序集合的内容。
  • 如果有序集合中存在多个相同分数的成员,排名将按照成员的字典顺序进行排序。

5 ZCARD:获取sorted set中的元素个数

在这里插入图片描述

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZCARD myzset
(integer) 2

6 ZCOUNT:统计score值在给定范围内的所有元素的个数

在这里插入图片描述
ZCOUNT 是 Redis 中用于获取有序集合中指定分数范围内的成员数量的命令。

ZCOUNT key min max
  • key: 有序集合的键名。
  • min: 分数范围的下限。
  • max: 分数范围的上限。

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZADD myzset 3 "three"
(integer) 1
redis> ZCOUNT myzset -inf +inf
(integer) 3
redis> ZCOUNT myzset (1 3
(integer) 2

返回指定分数范围内的成员数量。

行为说明

  • 查询并返回有序集合中分数在给定范围内的成员数量,包括边界的成员。

示例

有序集合 zset1,其中包含成员 member1member2member3,其分数分别为 102030

ZADD zset1 10 member1 20 member2 30 member3

查询分数在 [15, 25] 范围内的成员数量:

ZCOUNT zset1 15 25

执行后:

  • 假设有序集合中没有相同分数的成员,返回值将是 1,因为只有 member2 的分数在 1525 之间。

7 ZINCRBY:让sorted set中的指定元素自增,步长为指定的increment值

在这里插入图片描述
ZINCRBY 是 Redis 中用于对有序集合中指定成员的分数进行增加或减少的命令。

ZINCRBY key increment member
  • key: 有序集合的键名。
  • increment: 要增加(正数)或减少(负数)的分数。
  • member: 要增加或减少分数的成员。

返回值

redis> ZADD myzset 1 "one"
(integer) 1
redis> ZADD myzset 2 "two"
(integer) 1
redis> ZINCRBY myzset 2 "one"
"3"
redis> ZRANGE myzset 0 -1 WITHSCORES
1) "two"
2) "2"
3) "one"
4) "3"

返回成员的新分数。

行为说明

  • 如果给定的成员不存在于有序集合中,将会新增该成员并设置初始分数。
  • 如果给定的成员在有序集合中存在,将会更新该成员的分数。

示例

有序集合 zset1,其中包含成员 member1member2,它们的分数分别是 1020

ZADD zset1 10 member1 20 member2

member1 的分数增加 5

ZINCRBY zset1 5 member1

执行后:

  • 返回值为 15,表示 member1 的新分数是 15

再将 member2 的分数减少 3.5

ZINCRBY zset1 -3.5 member2

执行后:

  • 返回值为 16.5,表示 member2 的新分数是 16.5

注意事项

  • ZINCRBY 命令可以增加或减少有序集合中成员的分数,如果成员不存在,会新增该成员并设置初始分数。

8 ZRANGE:按照score排序后,获取指定排名范围内的元素

在这里插入图片描述
ZRANGE 是 Redis 中用于获取有序集合中指定范围内成员的命令。

支持多种选项来定制输出结果,包括按分数、字典顺序排序,反向排序,以及包含成员分数等。

ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
  • key: 有序集合的键名。
  • start: 开始位置(索引)。
  • stop: 结束位置(索引)。
  • BYSCORE: 按分数排序。
  • BYLEX: 按字典顺序排序。
  • REV: 反向排序。
  • LIMIT offset count: 返回结果的限制和偏移量。
  • WITHSCORES: 包含分数在输出结果中。

参数说明

  • startstop 可以是负数,表示从集合末尾开始计算。例如,-1 表示最后一个元素,-2 表示倒数第二个元素,依此类推。
  • BYSCOREBYLEX 不能同时使用。
  • REV 可与 BYSCOREBYLEX 一起使用,使得结果按指定顺序的反向输出。
  • LIMIT offset count 用于分页,offset 表示偏移量,count 表示返回的最大元素数量。
  • WITHSCORES 将成员的分数一起返回。

示例

有序集合 zset1,其中包含以下成员和分数:

ZADD zset1 1 "one" 2 "two" 3 "three" 4 "four"

获取索引从 0 到 2 的成员:

ZRANGE zset1 0 2

返回:

1) "one"
2) "two"
3) "three"

获取索引从 0 到 2 的成员,并包含分数:

ZRANGE zset1 0 2 WITHSCORES

返回:

1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"

按分数范围获取成员,从分数 1 到 3:

ZRANGE zset1 1 3 BYSCORE

返回:

1) "one"
2) "two"
3) "three"

按字典顺序获取成员,并反向排列:

ZRANGE zset1 - + BYLEX REV

返回:

1) "two"
2) "three"
3) "one"
4) "four"

使用 LIMIT 选项来进行分页,获取按分数排序后的前两个成员:

ZRANGE zset1 -inf +inf BYSCORE LIMIT 0 2

返回:

1) "one"
2) "two"

9 ZDIFF、ZINTER、ZUNION:求差集、交集、并集

  1. ZDIFF
    在这里插入图片描述

ZDIFF 用于计算多个有序集合之间的差集,并将结果存储在新的有序集合中。

ZDIFF numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
  • numkeys: 要进行差集计算的有序集合数量。
  • key: 要进行差集计算的有序集合键名。
  • WEIGHTS weight [weight ...]: 可选参数,用于指定每个有序集合的权重,默认为 1。
  • AGGREGATE SUM|MIN|MAX: 可选参数,指定计算交集时如何聚合分数,默认为 SUM

示例:

ZDIFF 3 zset1 zset2 zset3 WEIGHTS 2 3 1 AGGREGATE MAX
  1. ZINTER
    在这里插入图片描述

ZINTER 用于计算多个有序集合的交集,并将结果存储在新的有序集合中。

ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

参数说明与 ZDIFF 类似,不同之处在于计算的是交集。

示例:

ZINTER 3 zset1 zset2 zset3 WEIGHTS 2 3 1 AGGREGATE MAX
  1. ZUNION
    在这里插入图片描述

ZUNION 用于计算多个有序集合的并集,并将结果存储在新的有序集合中。

ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]

参数说明与 ZDIFFZINTER 类似,不同之处在于计算的是并集。

示例:

ZUNION 3 zset1 zset2 zset3 WEIGHTS 2 3 1 AGGREGATE MAX

更多的SortedSet命令可以去官网https://redis.io/docs/latest/commands/?group=sorted-set查看哦~
在这里插入图片描述

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

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

相关文章

库卡机器人减速机维修齿轮磨损故障

一、KUKA机器人减速器齿轮磨损故障的原因 1. 润滑不足:润滑油不足或质量不佳可能导致齿轮磨损。 2. 负载过重:超过库卡机械臂减速器额定负载可能导致齿轮磨损。 3. 操作不当:未按照说明书操作可能导致KUKA机器人减速器齿轮磨损。 4. 维护不足…

Unity Apple Vision Pro 开发(三):visionOS 应用形态

文章目录 📕教程说明📕常用名词解释📕visionOS 空间类型⭐Shared Space 共享空间⭐Full Space/Immersive Space 独占空间 📕visionOS 渲染框架📕Unity 开发 visionOS 应用的不同模式⭐**窗口模式**⭐VR 模式⭐MR 模式 …

关于edge浏览器注册Kaggle不显示验证部分的问题

使用edge注册kaggle没有显示验证的部分导致无法完成注册 法一 谷歌大法好,使用谷歌注册就么有问题,然鹅需要魔法上网。 法二 使用 edge的Header Editor的插件 收到邮件后填写即可 参考博客: Kaggle平台注册弹不出验证码怎么办&#…

【C++LeetCode】【热题100】最长连续序列【中等】-不同效率的题解【5】

题目&#xff1a; 暴力方法&#xff1a; class Solution { public:int longestConsecutive(vector<int>& nums) {int maxlen1;//定义最长连续序列if(nums.size()<1){//特殊情况的长度 等于序列长度return nums.size();}std::unordered_set<int> uniqu…

内容安全复习 8 - 视觉内容伪造与检测

文章目录 研究背景内容伪造方法虚假人脸生成人脸替换属性编辑表情重演跨模态人脸编辑 伪造检测方法眨眼检测交互式人脸活体检测一些了解方法挑战 研究背景 图像内容篡改造成新闻报道的偏颇易导致社会和公共秩序的不安&#xff0c;对公共安全产生不良影响。 造成的影响&#x…

数据结构经典面试之列表——C#和C++篇

文章目录 1. 数据结构概述2. 列表&#xff08;List&#xff09;的基本概念与操作3. 列表的具体实现方式3.1 数组实现3.2 链表实现 4. 列表在C#和C中的使用示例4.1 C#中的列表使用示例4.2 C中的列表使用示例 5. 总结 数据结构是计算机科学中非常重要的一个领域&#xff0c;它主要…

vue-cli 根据文字生成pdf格式文件 jsPDF

1.安装jspdf npm install jspdf --save 2.下载ttf格式文件 也可以用C:\Windows\Fonts下的字体文件&#xff0c;反正调一个需要的ttf字体文件就行&#xff0c;但有的字体存在部分字体乱码现象 微软雅黑ttf下载地址&#xff1a; FontsMarket.com - Download Microsoft YaHei …

一种基于稀疏学习的旋转机械故障诊断方法(MATLAB)

稀疏表示方法是一种利用最少原子在过完备字典上表示或逼近信号的方法&#xff0c;该方法具有信号表示的高分辨率、稀疏性、强抗干扰能力和自适应性等优点。稀疏表示聚焦于设计合适的稀疏表示字典和挖掘有用的稀疏先验信息&#xff0c;其核心思想是将故障特征信息近似表示为字典…

数据挖掘与分析——数据预处理

数据探索 波士顿房价数据集&#xff1a;卡内基梅隆大学收集&#xff0c;StatLib库&#xff0c;1978年&#xff0c;涵盖了麻省波士顿的506个不同郊区的房屋数据。 一共含有506条数据。每条数据14个字段&#xff0c;包含13个属性&#xff0c;和一个房价的平均值。 数据读取方法…

Ubuntu安装Vins-Fusion(1) —— Ubuntu18.04安装vins-fusion

目录 前言 1、准备1.1 安装ROS1.2 安装 Ceres Solver 2、安装 VINS-Fusion3、测试&#xff08;EuRoC MAV 数据集&#xff09;3.1、下载数据集3.2 Monocualr camera IMU3.3 Stereo cameras IMU3.4 Stereo cameras 参考 前言 VINS-Fusion 是一种基于优化的多传感器状态估计器&…

华为RH2288 V3安装 Linux 系统,安装过程心得

带着U盘&#xff0c;怀着激动的心情进入机房安装操作系统&#xff0c;结果没有显示器和键盘鼠标&#xff0c;傻眼了。 作为过来人&#xff0c;温馨提醒&#xff0c;进入机房前记得先打听&#xff0c;准备好这些&#xff1a;机房房间号、机柜编号、物理机编号、键盘、鼠标、显示…

C#调用OpenCvSharp计算并显示带掩膜的图像直方图

之前的文章简要测试了调用OpenCvSharp的Cv2.CalcHist函数计算直方图的用法&#xff0c;不过使用过程中参数mask的值始终为null&#xff0c;也就是计算的整幅图像的直方图&#xff0c;如果mask不为空&#xff0c;则可以计算图像指定区域的直方图&#xff0c;本文学习掩膜的创建方…

一键部署开源PaaS服务Dokploy,代替Vercel, Netlify 以及 Heroku

前言 Vercel, Netlify 以及 Heroku都是知名的PaaS&#xff08;Platform as a Service|平台即服务&#xff09;服务商&#xff0c;利用这些平台我们可以方便快捷的进行项目部署。尤其是各家生态完善&#xff0c;是很多独立开发者的首选之地。 但是随之而来的就是另外的隐患了&…

如何用Spring使用Redis作为消息订阅?

目录 一、Spring 框架介绍二、Redis 框架介绍三、什么是消息订阅四、如何用Spring使用Redis作为消息订阅 一、Spring 框架介绍 Spring 框架是一个开源的 Java 平台&#xff0c;它提供了全面的基础设施支持&#xff0c;以便您可以更容易地开发 Java 应用程序。Spring 处理了基础…

全局唯一ID生成

全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具需满足以下特性&#xff1a; 唯一性、递增性、安全性、高可用、高性能 生成在所有库或表中都满足唯一得ID 实现&#xff1a; 利用Redis的自增功能 INCRBY key increment (INCRBY | Docs)&#xff0c;并在…

mysql 某个时间字段取值时间标识的字符串的值

SELECT STR_TO_DATE(substr(out_trade_no, 1,14), %Y-%m-%d %H:%i:%s) FROM o_order WHERE id 364457; UPDATE o_order SET created_time DATE_FORMAT(STR_TO_DATE(substr(out_trade_no, 1,14), %Y%m%d %H%i%s), %Y-%m-%d %H:%i:%s) WHERE id 364457; 举例&#xff1a; 1…

第9章 EM算法:例题及课后习题

1 概要 1&#xff0e;EM算法是含有隐变量的概率模型极大似然估计或极大后验概率估计的迭代算法。含有隐变量的概率模型的数据表示为 P ( Y , Z ∣ θ ) P(Y,Z|\theta) P(Y,Z∣θ)。这里&#xff0c; Y Y Y是观测变量的数据&#xff0c; Z Z Z是隐变量的数据&#xff0c; θ \t…

▶《强化学习的数学原理》(2024春)_西湖大学赵世钰 Ch4 值迭代 与 策略迭代 【动态规划 model-based】

PPT 截取必要信息。 课程网站做习题。总体 MOOC 过一遍 1、视频 学堂在线 习题 2、过 电子书 补充 【下载&#xff1a; 本章 PDF 电子书 GitHub】 [又看了一遍视频。原来第一次跳过了好多内容。。。] 3、总体 MOOC 过一遍 习题 学堂在线 课程页面链接 中国大学MOOC 课程页面链…

keep-alive实现页面缓存

<!--router-view 实现页面缓存--> <router-view v-slot"{Component}"><keep-alive :max"8"><component :is"Component"></component></keep-alive> </router-view>