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

Redis 有序集合(Zset / Sorted Set)

Redis 有序集合(Zset / Sorted Set)

Redis 有序集合(Zset / Sorted Set)完整笔记


一、Zset 简介

Redis 有序集合 Zset 与普通集合 Set 类似,是不包含重复元素的字符串集合

核心区别:

  • 每个成员都关联一个 score(评分),集合会按照 score 从小到大排序。
  • 成员是唯一的,但 score 可以重复。
  • 因为元素有序,所以可以快速根据 score 或位置(排名)获取一个范围的元素。
  • 底层类似 Java 中的 Map<String, Double>(存储 value-score 映射),又类似 TreeSet(按 score 排序)。

二、常用命令

命令 语法 作用
zadd zadd <key> <score1> <value1> <score2> <value2> ... 将一个或多个成员及其 score 值加入有序集合
zrange zrange <key> <start> <stop> [WITHSCORES] 返回集合中索引在 [start, stop] 之间的元素;WITHSCORES 会同时返回 score
zrangebyscore zrangebyscore <key> <min> <max> [WITHSCORES] [LIMIT offset count] 返回 score 介于 minmax 之间的成员,按 score 升序排列
zrevrangebyscore zrevrangebyscore <key> <max> <min> [WITHSCORES] [LIMIT offset count] zrangebyscore 类似,改为按 score 降序排列
zincrby zincrby <key> <increment> <value> 为元素的 score 加上指定增量(可正可负)
zrem zrem <key> <value> 删除集合中指定的成员
zcount zcount <key> <min> <max> 统计 score[min, max] 区间内的元素个数
zrank zrank <key> <value> 返回成员在集合中的排名(从 0 开始)

三、典型案例:实现文章访问量排行榜

# 添加数据:文章v1访问量1000,v2访问量2000,v3访问量3000
127.0.0.1:6379> zadd topn 1000 v1 2000 v2 3000 v3
(integer) 3# 按访问量从高到低取前10名,并显示分数
127.0.0.1:6379> zrevrange topn 0 9 withscores
1) "v3"
2) "3000"
3) "v2"
4) "2000"
5) "v1"
6) "1000"

四、底层数据结构

Zset 底层同时使用两种数据结构:

  1. Hash 表:关联 valuescore,保证元素的唯一性,支持通过 value 快速查找 score
  2. 跳跃表(Skip List):用于按 score 对元素进行排序,支持高效的范围查询。

跳跃表(跳表)简介

  • 跳跃表是一种多层链表结构,通过“跳级”指针实现类似平衡树的查找效率,平均时间复杂度为 O(logN),实现远比红黑树简单。
  • 查找示例:查找值为 51 的元素
    • 普通有序链表:需要从 1 开始依次遍历,共需 7 次比较。
    • 跳跃表:通过多层指针“跳跃”查找,仅需 4 次比较即可找到元素,效率显著更高。

五、典型应用场景

  • 排行榜:如游戏积分、文章访问量、用户点赞数排名。
  • 延时队列:将任务的执行时间作为 score,定时轮询获取 score 小于当前时间的任务并执行。
  • 带权重的任务调度:根据任务优先级设置不同的 score,实现按优先级调度。

http://www.jsqmd.com/news/892026/

相关文章:

  • 脉冲神经网络在可穿戴心电监测中的应用:FFT+SNN+SVR架构与硬件部署实践
  • WebGAL视觉小说引擎:从零开始创作互动故事的终极指南
  • 1.4t4
  • 萧山金城路黄金回收探访:这家商业街区门店为何让人安心? - 百福黄金回收
  • 5个简单步骤:用BiliBiliCCSubtitle实现B站字幕高效提取
  • 井下安全体系反思:摒弃 UWB 固有模式,无感定位升级矿山透明化空间管理水准
  • 《流畅的Python》读书笔记12(补充01): 符合 Python 风格的对象 - Python类的运算协议全解析
  • 从理想模型到现实调度:WFQ算法的公平性保障与实现挑战
  • 基于图神经网络与社区检测的教育公平性分析:从数据洞察到精准干预
  • 2026 实测明星同款声音克隆 AI 工具 短视频批量创作合规高还原优选榜单 - 品牌企业推荐师(官方)
  • 空间追踪逻辑革新:无感定位三维解算,突破UWB巷道盲区瓶颈
  • 1.4t5
  • 英雄联盟智能助手Seraphine:5分钟掌握游戏信息优势的终极指南
  • Claude 4.7 Opus 智能应用落地实战指南
  • LoRA微调技术:破解低资源语言机器翻译难题的实践指南
  • OpenAvatarChat完整指南:5分钟打造你的AI数字人对话系统
  • 混沌半监督学习:破解工业设备寿命预测的数据与动态难题
  • CDSSL自监督学习框架:统一线性与非线性依赖,提升表征学习能力
  • 高瓦斯矿井场景:无感定位为最优解,UWB不再适配高危工况
  • 助睿数智实操教程:学生考勤画像可视化分析——从指标卡到综合仪表盘
  • 2026山东大学软件学院项目实训(五)
  • Mooncake:以 KVCache 为中心的分离式 LLM 服务架构
  • 2026亲测:专业AI智能降重工具选它准没错
  • 2026年,杭州这些口碑好的跨境电商咨询服务商,究竟好在哪里? - 品牌企业推荐师(官方)
  • 井下频频失联,UWB短板频发,无感定位如何破局?
  • 2026年正规的安徽雕塑定制厂家有哪些厂家推荐榜,3D打印雕塑/玻璃钢雕塑/泡沫雕塑 - 品牌企业推荐师(官方)
  • Java 匿名内部类与方法执行时间计算
  • 饲料颗粒机厂家
  • 【分享】HyperMesh vs SimLab:CAE前处理老司机与智能助手的终极对决
  • 观察使用 Token Plan 套餐后月度 API 成本的可预测性变化