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

Redis 中有序集合(Sorted Set)的使用方法

文章目录

  • 前言
    • 1. 有序集合的特点
    • 2. 常用命令
      • 2.1 添加元素(ZADD)
      • 2.2 获取元素分数(ZSCORE)
      • 2.3 获取元素排名(ZRANK / ZREVRANK)
      • 2.4 获取范围内的元素(ZRANGE / ZREVRANGE)
      • 2.5 获取分数范围内的元素(ZRANGEBYSCORE / ZREVRANGEBYSCORE)
      • 2.6 删除元素(ZREM)
      • 2.7 统计元素个数(ZCARD)
      • 2.8 统计分数范围内的元素个数(ZCOUNT)
      • 2.9 增加元素的分数(ZINCRBY)
    • 3. 使用场景
      • 3.1 排行榜
      • 3.2 延时队列
      • 3.3 范围查询
    • 4. 总结


前言

Redis 的有序集合(Sorted Set)是一种非常强大的数据结构,它结合了集合(Set)和有序列表的特点。每个元素都会关联一个分数(score),Redis 会根据分数对元素进行排序。有序集合中的元素是唯一的,但分数可以重复。

本文将详细介绍有序集合的常用命令及其使用方法。


1. 有序集合的特点

  • 元素唯一性:有序集合中的元素是唯一的,不允许重复。
  • 分数排序:每个元素都关联一个分数(score),Redis 根据分数对元素进行排序。
  • 高效操作:支持高效的插入、删除和范围查询操作。

2. 常用命令

2.1 添加元素(ZADD)

向有序集合中添加一个或多个元素,并指定分数。

ZADD key score member [score member ...]

示例

ZADD myzset 1 "one"
ZADD myzset 2 "two" 3 "three"
  • 如果元素已存在,则会更新其分数。
  • 返回成功添加的元素数量。

2.2 获取元素分数(ZSCORE)

获取指定元素的分数。

ZSCORE key member

示例

ZSCORE myzset "one"

2.3 获取元素排名(ZRANK / ZREVRANK)

获取指定元素在有序集合中的排名(从 0 开始)。

  • ZRANK:按分数升序排名。
  • ZREVRANK:按分数降序排名。
ZRANK key member
ZREVRANK key member

示例

ZRANK myzset "two"  # 返回 1(升序排名)
ZREVRANK myzset "two"  # 返回 1(降序排名)

2.4 获取范围内的元素(ZRANGE / ZREVRANGE)

获取有序集合中指定排名范围内的元素。

  • ZRANGE:按分数升序返回元素。
  • ZREVRANGE:按分数降序返回元素。
ZRANGE key start stop [WITHSCORES]
ZREVRANGE key start stop [WITHSCORES]

示例

ZRANGE myzset 0 -1  # 返回所有元素(升序)
ZRANGE myzset 0 -1 WITHSCORES  # 返回所有元素及其分数
ZREVRANGE myzset 0 1  # 返回前两个元素(降序)

2.5 获取分数范围内的元素(ZRANGEBYSCORE / ZREVRANGEBYSCORE)

获取有序集合中指定分数范围内的元素。

  • ZRANGEBYSCORE:按分数升序返回元素。
  • ZREVRANGEBYSCORE:按分数降序返回元素。
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

示例

ZRANGEBYSCORE myzset 1 2  # 返回分数在 1 到 2 之间的元素
ZRANGEBYSCORE myzset -inf +inf  # 返回所有元素
ZREVRANGEBYSCORE myzset 2 1  # 返回分数在 1 到 2 之间的元素(降序)

2.6 删除元素(ZREM)

从有序集合中删除一个或多个元素。

ZREM key member [member ...]

示例

ZREM myzset "one"

2.7 统计元素个数(ZCARD)

获取有序集合中元素的总数。

ZCARD key

示例

ZCARD myzset

2.8 统计分数范围内的元素个数(ZCOUNT)

获取有序集合中分数在指定范围内的元素个数。

ZCOUNT key min max

示例

ZCOUNT myzset 1 2

2.9 增加元素的分数(ZINCRBY)

为指定元素的分数增加一个增量值。

ZINCRBY key increment member

示例

ZINCRBY myzset 5 "one"  # 将 "one" 的分数增加 5

3. 使用场景

3.1 排行榜

有序集合非常适合实现排行榜功能。例如,可以将用户的分数作为 score,用户 ID 作为 member,然后使用 ZRANGEZREVRANGE 获取排名。

示例

ZADD leaderboard 1000 "user1"
ZADD leaderboard 2000 "user2"
ZREVRANGE leaderboard 0 9 WITHSCORES  # 获取前 10 名用户

3.2 延时队列

可以将任务的执行时间作为 score,任务 ID 作为 member,然后使用 ZRANGEBYSCORE 获取到期的任务。

示例

ZADD tasks 1633072800 "task1"  # 任务执行时间为 2021-10-01 12:00:00
ZRANGEBYSCORE tasks -inf 1633072800  # 获取所有到期的任务

3.3 范围查询

如果需要根据某个范围快速查询数据,可以使用有序集合的 ZRANGEBYSCORE 命令。


4. 总结

Redis 的有序集合是一种非常灵活且高效的数据结构,适用于需要排序和范围查询的场景。通过合理使用有序集合,可以轻松实现排行榜、延时队列、范围查询等功能。

以下是常用命令的快速参考:

命令描述
ZADD key score member添加元素
ZSCORE key member获取元素分数
ZRANK key member获取元素排名(升序)
ZREVRANK key member获取元素排名(降序)
ZRANGE key start stop获取排名范围内的元素
ZRANGEBYSCORE key min max获取分数范围内的元素
ZREM key member删除元素
ZCARD key获取元素总数
ZCOUNT key min max统计分数范围内的元素个数
ZINCRBY key increment member增加元素的分数

希望本文能帮助你更好地理解和使用 Redis 的有序集合!如果有任何问题,欢迎随时提问 😊

相关文章:

Redis 中有序集合(Sorted Set)的使用方法

文章目录 前言1. 有序集合的特点2. 常用命令2.1 添加元素(ZADD)2.2 获取元素分数(ZSCORE)2.3 获取元素排名(ZRANK / ZREVRANK)2.4 获取范围内的元素(ZRANGE / ZREVRANGE)2.5 获取分数…...

WIn32 笔记:本专栏课件

专栏导航 上一篇:在VS2019里面,调整代码字体大小 回到目录 下一篇:无 本节前言 在之前的讲解里面,我讲解了 Visual Studio 软件的一些个基础操作步骤。从本节开始,我们进入预备章。 本节内容,属于是 …...

Unity git 获取当前修改或者新增的文件列表

直接上代码 using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Text.RegularExpressions; using UnityEngine;public class GitFileStatusCheckerTools : MonoBehaviour {// 获取Git变更文件列表(新增/修…...

结构型模式 - 桥接模式 (Bridge)

结构型模式 - 桥接模式 (Bridge) 桥接模式是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立地变化。 // 软件接口,作为实现部分 interface Software {void run(); }// 游戏软件类,实现 Software 接口 class Game…...

如何让传统制造企业从0到1实现数字化突破?

随着全球制造业不断向智能化、数字化转型,传统制造企业面临着前所未有的机遇与挑战。数字化转型不仅是技术的革新,更是管理、文化、业务流程等全方位的变革。从零开始,如何带领一家传统制造企业走向数字化突破,是许多企业领导者面…...

【Elasticsearch】script_fields 和 runtime_fields的区别

script_fields和runtime_fields都是 Elasticsearch 中用于动态计算字段值的功能,但它们在实现方式、应用场景和性能表现上存在显著区别。以下是两者的详细对比: 1.定义和应用场景 • script_fields: • 定义:通过 Painless 脚本…...

城电科技|会追日的智能花,光伏太阳花开启绿色能源新篇章

当艺术与科技相遇,会碰撞出怎样的火花?城电科技推出的光伏太阳花,以其独特的设计与智能化的功能,给出了答案。这款产品不仅具备太阳能发电的实用功能,更是一件充满科技属性的艺术性光伏产品,吸引了广泛关注…...

【笔记ing】C语言补充、组成原理数据表示与汇编实战、操作系统文件实战(高级阶段)

【第19节 C语言语法进阶】 【19.1 条件运算符与逗号运算符】 1 条件运算符 条件运算符是C语言中唯一的一种三亩运算符。三目运算符代表有三个操作数;双目运算符代表有两个操作数,如逻辑运算符就是双目运算符;弹幕运算符代表有一个操作数&a…...

快节奏生活

在当今快节奏的商务环境中,效率成为了决定企业竞争力的关键因素之一。亿可达软件连接平台,以其独特的功能和优势,为职场人士带来了前所未有的便捷与高效,成为了众多用户心中的“宝藏”工具。 1、亿可达:自动化流程的搭…...

【音视频】音视频录制、播放原理

一、音视频录制原理 通常,音视频录制的步骤如下图所示: 我们分别从音频和视频开始采样,通过麦克风和摄像头来接受我们的音频信息和图像信息,这通常是同时进行的,不过,通常视频的采集会比音频的采集慢&…...

前端Sass面试题及参考答案

目录 什么是 Sass? Sass 和 CSS 的主要区别是什么? Sass 中如何处理列表? Sass 中如何处理映射(map)? Sass 中如何使用函数? Sass 中如何使用内置函数? Sass 中如何设置默认值? Sass 中的 @function 和 @mixin 有什么区别? Sass 中如何实现模块化? Sass 中…...

Web自动化之Selenium控制已经打开的浏览器(Chrome,Edge)

在使用selenium进行web自动化或爬虫的时候,经常会面临登录的情况,对于这种情况,我们可以利用Selenium控制已经打开的浏览器,从而避免每次都需要重新打开浏览器并进行登录的繁琐步骤。 目录 说明 启动浏览器 注意 --user-data-dir说明 代码设定 代码 改进代…...

AF3 unify_template_features 函数解读

AlphaFold3 data_pipeline 模块的 unify_template_features 函数用于将多条链的模板特征整合为一个统一的 FeatureDict,以适应对多链复合物的处理。每条链的模板特征经过索引偏移处理后,拼接为一个完整的模板特征矩阵。 该方法的核心在于: 序列对齐:根据每条链的长度,将模…...

FFmpeg.NET:.NET 平台上的音视频处理利器

FFmpeg.NET 是一个封装了 FFmpeg 功能的 .NET 库,能够方便地在 C# 项目中处理音视频文件。它支持多种操作,包括转码、剪辑、合并、分离音频等。 功能 解析元数据从视频生成缩略图使用以下参数将音频和视频转码为其他格式: 码率(…...

解决 Git 合并冲突:当本地修改与远程提交冲突时

目录 错误原因分析 解决方法 1. 暂存本地修改并合并(保留更改) 2. 丢弃本地修改(强制覆盖) 3. 暂存修改后合并(推荐:使用 git stash) 4. 选择性合并(手动处理冲突文件&#xf…...

SOME/IP-SD -- 协议英文原文讲解5

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.2.5 S…...

spark的一些指令

一,复制和移动 1、复制文件 格式:cp 源文件 目标文件 示例:把file1.txt 复制一份得到file2.txt 。那么对应的命令就是:cp file1.txt file2.txt 2、复制目录 格式:cp -r 源文件 目标文件夹 示例:把目…...

Redis常用数据类型及其应用案例

文章目录 Redis常用数据类型及其应用案例1. 字符串(String)1.1 简介1.2 应用案例1.2.1 缓存1.2.2 计数器 2. 哈希(Hash)2.1 简介2.2 应用案例2.2.1 存储用户信息2.2.2 购物车 3. 列表(List)3.1 简介3.2 应用…...

kafka数据拉取和发送

文章目录 一、原生 KafkaConsumer1、pom文件引入kafka2、拉取数据3、发送数据二、在spring boot中使用@KafkaListener1、添加依赖2、application.yml3、消息拉取:consumer4、自定义ListenerContainerFactory5、消息发送:producer6、kafka通过clientId鉴权时的鉴权失败问题一、…...

LLM全栈框架完整分类清单(预训练+微调+工具链)

一、预训练框架 1. 大规模分布式训练框架 框架名称核心能力GitHub地址Megatron-LM3D并行训练、FlashAttention支持、Transformer架构优化(NVIDIA生态)NVIDIA/Megatron-LMDeepSpeedZeRO优化系列、3D并行、RLHF全流程支持(微软生态&#xff09…...

VMware虚拟机部署万物识别镜像指南

VMware虚拟机部署万物识别镜像指南 1. 引言 想在本地环境体验强大的AI视觉识别能力,但又不想折腾复杂的驱动和环境配置?通过VMware虚拟机部署万物识别镜像,可能是最简单快捷的方式。这个方案特别适合想要快速上手AI视觉识别、进行原型验证或…...

Kook Zimage真实幻想Turbo效果炸裂!高清梦幻人像作品集首发

Kook Zimage真实幻想Turbo效果炸裂!高清梦幻人像作品集首发 1. 梦幻人像生成新标杆 当第一次看到Kook Zimage真实幻想Turbo生成的作品时,我作为一个从业多年的数字艺术创作者,也不禁为它的表现力所震撼。这款基于Z-Image-Turbo底座的幻想风…...

Scroll Reverser:彻底解决Mac多设备滚动冲突的终极方案

Scroll Reverser:彻底解决Mac多设备滚动冲突的终极方案 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你是否曾经在MacBook上使用触控板时习惯自然滚动(…...

Qwen3-TTS快速入门:上传15秒语音,一键生成你的专属AI配音

Qwen3-TTS快速入门:上传15秒语音,一键生成你的专属AI配音 1. 为什么选择Qwen3-TTS进行语音克隆 想象一下这样的场景:你需要为视频教程配音,但自己录音总是卡壳;或者想给海外客户发语音邮件,却苦于外语发音…...

Advanced Computing 正式启航,聚焦计算机科学全领域,现已开放投稿!

Advanced Computing 是一本聚焦计算机科学全领域的开放获取期刊,从理论基础、软件工程到人工智能、计算机视觉及新兴技术等方向,都属于其发表范畴。内容范围包括但不限于以下领域: 理论计算机科学与算法:包括算法设计与分析、计算…...

MySQL优化案例:忍者像素绘卷作品海量存储与查询实践

MySQL优化案例:忍者像素绘卷作品海量存储与查询实践 1. 场景与挑战 像素艺术分享平台"忍者像素绘卷"近期用户量突破百万,每天新增作品超过5万幅。平台需要存储每幅作品的元数据,包括提示词、生成参数、缩略图地址等信息。随着数据…...

nlp_structbert_sentence-similarity_chinese-large保姆级教程:错误日志排查与常见报错解决方案

nlp_structbert_sentence-similarity_chinese-large保姆级教程:错误日志排查与常见报错解决方案 1. 工具简介:你的中文句子相似度分析助手 nlp_structbert_sentence-similarity_chinese-large 是一个专门处理中文句子相似度的强大工具。它基于阿里达摩…...

国企行政筹办正式会议,标准国企会议纪要撰写权威指南

2026年国企筹办正式会议,写标准会议纪要是最容易踩坑的环节:表述不准、漏记待办分工都得返工,好多新人熬三个小时写的稿都过不了审。今天就把我摸了大半年的标准撰写方法,还有能省80%时间的工具技巧讲明白。去年我在集团行政部轮岗…...

Go 语言条件编译实战:从语法技巧到生产级架构设计

Go 语言条件编译实战:从语法技巧到生产级架构设计 1. 写在前面 在很多团队里,Go 条件编译经常被当成一个“小技巧”使用: 区分 linux 和 windows 给企业版和社区版切换代码 在开发环境打开调试能力 在特定 CPU 架构下启用优化实现 但在生产系统里,条件编译远不止是“按标…...

C语言入门电子书免费领,小学生也能看懂

嘿,各位,我乃是良许,是一位在那嵌入式这个范畴里头,深深钻研了足足 12 年之久的资深工程师,还是先前于世界 500 强企业任职过的高级工程师。我耗用了3个月时长,撰写出一部C语言电子书,运用极为通…...