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

redis数据结构-09 (ZADD、ZRANGE、ZRANK)

Redis 排序集简介:ZADD、ZRANGE、ZRANK

Redis 有序集合是一种功能强大的数据结构,兼具集合和哈希的特性。它维护一组唯一元素,类似于集合;但每个元素都与一个分数相关联,类似于哈希。分数用于对有序集合中的元素进行排序,从而能够根据元素的排名高效地检索元素。本章节将向您介绍使用有序集合的基本命令: ZADDZRANGEZRANK 。我们将探索如何添加元素、如何根据元素的排名检索元素范围以及如何确定特定元素的排名。

向有序集合中添加元素:ZADD

ZADD 命令用于向有序集合中添加一个或多个成员,或更新现有成员的分数。语法如下:

ZADD key [NX|XX] [GT|LT] [CH] [INCR score] score member [score member ...]

让我们分解一下该命令及其选项:

  • key :有序集合的名称。如果键不存在,则创建一个新的有序集合。
  • NX :仅当元素在有序集合中不存在时才添加该元素。
  • XX :仅当元素已存在于有序集合中时才更新该元素。
  • GT :仅当新分数大于当前分数时才更新元素的分数。
  • LT :仅当新分数小于当前分数时才更新元素的分数。
  • CH :修改返回值以返回已更改元素的数量。更改的元素包括新添加的元素和分数更新的元素。因此, ZADD 中指定的分数与之前相同的元素不计算在内。注意:通常情况下, ZADD 的返回值仅计算添加到集合中的新元素的数量。
  • INCR score :指定此选项时, ZADD 作用类似于 ZINCRBY 。在此模式下只能指定一个分数元素对。
  • score :与会员关联的分数。分数可以是整数或浮点数。
  • member :要添加到有序集合中的元素。

以下是一些示例:

ZADD myzset 1 "one"

该命令将成员“one”添加到有序集合“myzset”中,得分为 1。

ZADD myzset 2 "two" 3 "three"

此命令将两个成员“two”(得分为 2)和“three”(得分为 3)添加到有序集合“myzset”中。

ZADD myzset NX 4 "four"

此命令尝试将分数为 4 的“four”添加​​到“myzset”,但前提是“four”尚不存在。

ZADD myzset XX 2.5 "two"

此命令尝试将“myzset”中的“two”分数更新为 2.5,但前提是“two”已经存在。

ZADD myzset GT 5 "one"

此命令尝试将“myzset”中的“one”分数更新为 5,但前提是新分数(5)大于当前分数“one”。

ZADD myzset CH 6 "six" 7 "one"

此命令添加得分为 6 的“六”,并将得分“一”更新为 7。返回值将反映更改的数量(添加的新元素或得分更新的现有元素)。

重要注意事项:

  • 分数不必唯一。多个成员可以拥有相同的分数。当成员分数相同时,将按字典顺序(字母顺序)排序。
  • ZADD 是一个多功能命令,可用于添加新成员和更新现有成员的分数。
  • NXXXGTLTCHINCR 选项可以对 ZADD 操作方式进行细粒度的控制。

按排名检索元素:ZRANGE

ZRANGE 命令根据成员在有序集合中的排名(位置),检索有序集合中一定范围内的成员。其语法如下:

ZRANGE key start stop [REV] [WITHSCORES]

让我们分解一下该命令及其选项:

  • key :排序集的名称。
  • start :范围的起始排名(含)。排名从 0 开始,即得分最低的成员排名为 0。
  • stop :范围的结束等级(含)。
  • REV :指定后,命令以相反的顺序返回元素(从最高分数到最低分数)。
  • WITHSCORES :指定后,命令将返回分数以及成员。

以下是一些示例:

首先,让我们用一些数据填充我们的 myzset

ZADD myzset 1 "one" 2 "two" 3 "three" 4 "four" 5 "five"

现在,让我们检索一些范围:

ZRANGE myzset 0 2

此命令从“myzset”中检索排名为 0、1 和 2 的成员。输出如下:

1) "one"
2) "two"
3) "three"
ZRANGE myzset 1 -1

此命令检索排序集合中从 1 到末尾的所有成员。索引 -1 表示最后一个元素。输出结果如下:

1) "two"
2) "three"
3) "four"
4) "five"
ZRANGE myzset 0 2 WITHSCORES

此命令检索排名为 0、1 和 2 的成员及其分数。输出如下:

1) "one"
2) "1"
3) "two"
4) "2"
5) "three"
6) "3"
ZRANGE myzset 0 -1 REV

此命令将按相反的顺序(从最高分到最低分)检索所有成员。输出如下:

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

重要注意事项:

  • ZRANGE 是一种根据成员的排名从排序集合中检索成员子集的有效方法。
  • 负索引可用于指定相对于排序集末尾的排名。
  • 当您需要检索成员及其相关分数时, WITHSCORES 选项很有用。
  • REV 选项允许您轻松地以相反的顺序检索成员。

确定元素的排名:ZRANK

ZRANK 命令返回有序集合中成员的排名。该排名从 0 开始,即得分最低的成员排名为 0。语法如下:

ZRANK key member
  • key :排序集的名称。
  • member :您要确定其等级的成员。

以下是一些示例,继续使用 myzset

ZRANK myzset "three"

此命令返回成员“three”在“myzset”中的排名。输出如下:

(integer) 2
ZRANK myzset "one"

此命令返回成员“one”在“myzset”中的排名。输出如下:

(integer) 0
ZRANK myzset "nonexistent"

此命令尝试检索排序集合中不存在的成员的排名。输出如下:

(nil)

如果您想要按相反的顺序(从最高分到最低分)获得排名,您可以使用 ZREVRANK

ZREVRANK myzset "three"

此命令返回“myzset”中成员“three”的反向排名。输出如下:

(integer) 2

重要注意事项:

  • 如果成员不存在于排序集合中, ZRANK 返回 nil
  • ZRANK 是一种快速操作,因为它利用了数据结构的排序特性。
  • ZREVRANK 提供反向排名,在某些情况下很有用。
http://www.xdnf.cn/news/431947.html

相关文章:

  • 论文解读:Drivestudio——OmniRe: Omni Urban Scene Reconstruction
  • 【漫话机器学习系列】257.填补缺失值(Imputing Missing Values)
  • OpenAI新开源项目Codex CLI提升开发效率的新利器
  • 国自然项目|朱蓓薇院士团队谭明乾教授课题组在ACS Nano(IF=15.8)发表高水平文章!
  • 雅思口语 Part 1 Math
  • 从零开始掌握FreeRTOS(2)链表之节点的定义
  • 虹科干货 | CAN XL安全实践:深度防御下的密钥协商优化
  • 自然语言生成在商业智能中的应用实践
  • Future,Callable,CompletableFuture是什么?
  • 2025年项目管理软件革命:AI与国产化浪潮如何重塑企业协作生态
  • tc qdisc参数详解
  • 智慧校园场景下iVX 研发基座应用实践与行业适配研究
  • Milvus(21):过滤搜索、范围搜索、分组搜索
  • python面试实战经验分享
  • Python 实战:如何智能修改字典中的实体值?
  • 从 Vue3 回望 Vue2:响应式的内核革命
  • 集成设备管理(IDM)
  • Android组件权威解析:Activity与Fragment的深度探索与实战
  • 双种群进化算法:动态约束处理与资源分配解决约束多目标优化问题
  • AI模拟了一场5亿年的进化
  • Python Django基于模板的药品名称识别系统【附源码、文档说明】
  • 支付宝小程序开发指南
  • servlet-api
  • 转发多台px4仿真UDP数据到地面站
  • R²AIN SUITE:AI+文档切片,重塑知识管理新标杆
  • Sails.js 知识框架整理
  • 超声波传感器模块
  • 消息~组件(群聊类型)ConcurrentHashMap发送
  • 自适应稀疏核卷积网络:一种高效灵活的图像处理方案
  • Java自定义线程池:从原理到高性能实践