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

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 提供反向排名,在某些情况下很有用。

相关文章:

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

Redis 排序集简介:ZADD、ZRANGE、ZRANK Redis 有序集合是一种功能强大的数据结构,兼具集合和哈希的特性。它维护一组唯一元素,类似于集合;但每个元素都与一个分数相关联,类似于哈希。分数用于对有序集合中的元素进行排…...

PyTorch API 1 - 概述、数学运算、nn、实用工具、函数、张量

文章目录 torch张量创建操作索引、切片、连接与变异操作 加速器生成器随机采样原地随机采样准随机采样 序列化并行计算局部禁用梯度计算数学运算常量逐点运算归约操作比较运算频谱操作其他操作BLAS 和 LAPACK 运算遍历操作遍历操作遍历操作遍历操作遍历操作遍历操作遍历操作遍历…...

长短期记忆网络(LSTM)深度解析:理论、技术与应用全景

长短期记忆网络(LSTM)作为循环神经网络(RNN)的重要变体,通过门控机制有效解决了传统RNN的梯度消失问题,成为时序数据处理的核心技术。本文从理论起源、数学建模、网络架构、工程实现到行业应用,…...

c语言第一个小游戏:贪吃蛇小游戏02

接上文继续学习 ncurse的上下左右键获取 想要使用ncurse的功能键,也就是键盘快捷键,不是q、r、t,是 上下左右、F1、F2等等的键,我们叫做功能键要是想用这些功能键需要使用keypad函数 Keypad(stdscr,1); 从stdscr接收标准中&…...

【Python爬虫 !!!!!!政府招投标数据爬虫项目--医疗实例项目文档(提供源码!!!)!!!学会Python爬虫轻松赚外快】

政府招投标数据爬虫项目--医疗实例项目文档 1. 项目概述1.1 项目目标1.2 技术栈 2. 系统架构2.1 模块划分2.2 流程示意图 3. 核心模块设计3.1 反爬处理模块(utils/anti_crawler.py)3.1.1 功能特性3.1.2 关键代码 3.2 爬虫模块(crawler/spider…...

Android架构之自定义native进程

在Android五层架构中,native层基本上全是c的世界,这些c进程基本上靠android世界的第一个进程init进程创建,init通过rc配置文件,创建了众多的c子进程,也是这众多的c进程,构建了整个android世界的native层。 …...

talk-centos6之间实现

在 CentOS 6.4 上配置和使用 talk 工具,需要注意系统版本较老,很多配置可能不同于现代系统。我会提供 详细步骤 自动化脚本,帮你在两台 CentOS 6.4 机器上实现局域网聊天。 ⸻ 🧱 一、系统准备 假设你有两台主机: …...

《100天精通Python——基础篇 2025 第18天:正则表达式入门实战,解锁字符串处理的魔法力量》

目录 一、认识正则表达式二、正则表达式基本语法2.1 行界定符2.2 单词定界符2.3 字符类2.4 选择符2.5 范围符2.6 排除符2.7 限定符2.8 任意字符2.9 转义字符2.10 反斜杠2.11 小括号2.11.1 定义独立单元2.11.2 分组 2.12 反向引用2.13 特殊构造2.14 匹配模式 三、re模块3.1 comp…...

数组中元素如何交换与打乱

1 问题 在本周学习了java基础语法中的数组,在学习数组后,我们会遇到关于数组中元素的倒序,交换,和无序打乱等问题,在Python中我们可以用list的方法进行元素倒序,那么我们在java中应该如何实现数组用元素的倒序和元素的打乱呢? 2 方法 使用循环,Random类,下标索引实现 关于元素…...

Nuitka 已不再安全? Nuitka/Cython 打包应用逆向工具 -- pymodhook

pymodhook是一个记录任意对Python模块的调用的库,用于Python逆向分析。 pymodhook库类似于Android的xposed框架,但不仅能记录函数的调用参数和返回值,还能记录模块的类的任意方法调用,以及任意派生对象的访问,基于pyob…...

【C】初阶数据结构14 -- 归并排序

本篇文章主要是讲解经典的排序算法 -- 归并排序 目录 1 递归版本的归并排序 1) 算法思想 2) 代码 3) 时间复杂度与空间复杂度分析 (1) 时间复杂度 (2) 空间复杂度 2 迭代版本的归并…...

华为网路设备学习-21 IGP路由专题-路由过滤(filter-policy)

一、路由过滤(filter-policy) 1、用于控制路由更新、接收的一个工具 2、只能过滤路由信息,无法过滤LSA 二、路由过滤(filter-policy)与动态路由协议 1、距离矢量路由协议 RIP动态路由协议 交换的是路由表&#xff0…...

NestJS 框架深度解析

框架功能分析 NestJS 是一个基于 Node.js 的渐进式框架,专为构建高效、可扩展的服务器端应用程序而设计。其核心理念结合了 面向对象编程(OOP)、函数式编程(FP) 和 函数式响应式编程(FRP)&…...

人脸识别门禁系统技术文档

人脸识别门禁系统技术文档 序言 本文档详细描述了人脸识别门禁系统的技术实现原理与方法。该系统旨在提供高安全性的门禁管理解决方案,通过先进的人脸识别技术,实现无接触式身份验证,提高安全管理效率。 系统整合了人工智能与计算机视觉技…...

SAP 交货单行项目含税金额计算报cx_sy_zerodivide处理

业务背景:SAP交货单只有数量,没有金额,所以开发报表从订单的价格按数量计算交货单的金额。 用户反馈近期报表出现异常: ****2012/12/12 清风雅雨 规格变更 Chg 修改开始 ** 修改原因:由于余数为0时,可能会报错溢出。…...

【Qt】之音视频编程1:QtAV的背景和安装篇

QtAV 背景与核心概念 1. 什么是 QtAV? QtAV 是一个基于 Qt 框架 和 FFmpeg 的多媒体播放库,旨在为 Qt 应用程序提供高性能、跨平台的音视频播放、处理及渲染功能。它封装了 FFmpeg 的底层编解码能力,并通过 Qt 的图形系统(如 QM…...

算法与数据结构 - 二叉树结构入门

目录 1. 普通二叉树结构 1.1. 常见术语 1.2. 完全二叉树 (Complete Binary Tree) 1.3. 满二叉树 (Full Binary Tree) 2. 特殊二叉树结构 2.1. 二叉搜索树 (BST) 2.1.1. BST 基本操作 - 查找 2.1.2. BST 基本操作 - 插入 2.1.3. BST 基本操作 - 删除 2.2. 平衡二叉树…...

如何使用远程桌面控制电脑

目的: 通过路由器使用pc控制台式机,实现了有线/无线pc与台式机的双向远程桌面控制 最核心就两条:get ip地址与被控制机器的账户与密码。 现象挺神奇:被控制电脑的电脑桌面处于休眠模式,此时强行唤醒被控电脑会导致中断…...

SpringMVC-执行流程

目录 前言 一、SpringMVC执行流程 SpringMVC 主要组件 SpringMVC 的执行流程 简要分析执行流程 总结 前言 理解SpringMVC的执行流程是学习SpringMVC工作原理的重要一步。 项目内容参考:SpringMVC-简介及入门-CSDN博客 一、SpringMVC执行流程 SpringMVC 主要组…...

计算机网络网络层(下)

一、互联的路由选择协议(网络层控制层面内容) (一)有关路由选择协议的几个概念 1.理想的路由算法 (1)理想路由算法应具备的特点:算法必须正确和完整的,算法在计算上应简单&#x…...

深入学习Zookeeper的知识体系

目录 1、介绍 1.1、CAP 理论 1.2、BASE 理论 1.3、一致性协议ZAB 1、介绍 2、角色 3、ZXID和myid 4、 历史队列 5、协议模式 6、崩溃恢复模式 7、脑裂问题 2、zookeeper 2.1、开源项目 2.2、功能 2.3、选举机制 3、数据模型 3.1、介绍 3.2、znode分类 4、监听…...

主从架构:技术原理与实现

一.简单介绍分布式锁的复习 今天在一个分布式锁的视频讲解中,提到了主从架构,所以有了这篇文章。 当然我们可以先说说分布式锁,可以使用redis的setnxlua脚本实现,或者也可以用redission实现,或者看门狗机制。 由看门…...

大模型核心运行机制

大模型核心运行机制目录 一、核心架构:Transformer的演进与改进1.1 核心组件包括:1.1.1 自注意力机制(Self-Attention)1.1.2 多头注意力(Multi-Head Attention)1.1.3 位置编码(Positional Encod…...

uniapp跨平台开发HarmonyOS NEXT应用初体验

之前写过使用uniapp开发鸿蒙应用的教程,简单介绍了如何配置开发环境和运行项目。那时候的HbuilderX还是4.22版本,小一年过去了HbuilderX的正式版本已经来到4.64,历经了多个版本的更新后,跨平台开发鸿蒙应用的体验大幅提升。今天再…...

2025软考【系统架构设计师】:两周极限冲刺攻略(附知识点解析+答题技巧)

距离2025上半年“系统架构设计师”考试已经只剩最后两周了,还没有准备好的小伙伴赶紧行动起来。为了帮助大家更好的冲刺学习,特此提供一份考前冲刺攻略。本指南包括考情分析、答题技巧、注意事项三个部分,可以参考此指南进行最后的复习要领&a…...

C语言主要标准版本的演进与核心区别的对比分析

以下是C语言主要标准版本的演进与核心区别的对比分析 K&R C(1978年) 定位‌:非标准化的原始版本,由Brian Kernighan和Dennis Ritchie定义 特性‌: 基础语法:函数声明无参数列表(如int func…...

使用 goaccess 分析 nginx 访问日志

介绍 goaccess 是一个在本地解析日志的工具, 可以直接在命令行终端环境中使用 TUI 界面查看分析结果, 也可以导出为更加丰富的 HTML 页面. 官网: https://goaccess.io/ 下载安装 常见的 Linux 包管理器中都包含了 goaccess, 直接安装就行. 以 Ubuntu 为例: sudo apt instal…...

vue3与springboot交互-前后分离【完成登陆验证及页面跳转】

vue3实现与springboot交互【完成登陆及页面跳转】 提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有:学习and理解的关联性。【帮帮志系列文章】&#xff1a…...

【Hot 100】208. 实现 Trie (前缀树)

目录 引言实现 Trie (前缀树)我的解题代码解析代码思路分析优化建议1. 内存泄漏问题2. 使用智能指针优化内存管理3. 输入合法性校验(可选)4. 其他优化 总结 🙋‍♂️ 作者:海码007📜 专栏:算法专栏&#x1…...

【2025最新】Vm虚拟机中直接使用Ubuntu 免安装过程直接使用教程与下载

Ubuntu 是一个基于 Debian 的自由开源 Linux 操作系统,面向桌面、服务器和云计算平台广泛应用。 由英国公司 Canonical Ltd. 维护和发布,Ubuntu 强调易用性、安全性和稳定性,适合个人用户、开发者以及企业部署使用。 Ubuntu 默认使用 GNOME …...