当前位置: 首页 > 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…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...

dify打造数据可视化图表

一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...