redis的sorted set的应用场景

Redis 的 Sorted Set(有序集合,简称 ZSet) 结合了 Set 的去重特性 和 按分数(score)排序 的特性,非常适合需要 高效排序 或 范围查询 的场景。以下是它的典型应用场景及示例:

  1. 实时排行榜
    场景:游戏积分榜、电商热销榜、热搜排名
    核心命令:

bash
复制
ZADD leaderboard 5000 “PlayerA” 3000 “PlayerB” # 添加分数
ZREVRANGE leaderboard 0 9 WITHSCORES # 获取Top10(降序)
ZINCRBY leaderboard 100 “PlayerA” # 增加玩家分数
优势:

自动按分数排序,无需手动维护顺序

支持高效的范围查询(如 TopN、第 10-20 名)

  1. 延迟队列/定时任务
    场景:订单超时取消、定时提醒
    实现方式:

bash
复制
ZADD delay_queue 1630000000 “task:order:123” # 分数=执行时间戳
ZRANGEBYSCORE delay_queue 0 <当前时间戳> # 获取到期任务
ZREM delay_queue “task:order:123” # 任务完成后删除
优势:

利用分数排序特性自动按时间顺序执行任务

避免轮询数据库,性能更高

  1. 优先级任务调度
    场景:高优先级任务优先处理
    示例:

bash
复制
ZADD tasks 1 “urgent:report” 3 “normal:cleanup” # 分数越小优先级越高
ZRANGE tasks 0 0 WITHSCORES # 获取最高优先级任务
4. 时间轴/历史记录
场景:用户浏览历史、操作日志(按时间排序)
命令:

bash
复制
ZADD user:123:history 1629999999 “pageA” 1630000000 “pageB” # 分数=时间戳
ZREVRANGE user:123:history 0 9 # 获取最近10条记录
5. 地理位置附近检索(简化版)
场景:查找附近的店铺
实现:

bash
复制
ZADD shops 5.2 “storeA” 3.1 “storeB” # 分数=距离(km)
ZRANGEBYSCORE shops 0 5 # 查找5km内的店铺
6. 带权重的标签系统
场景:热门标签排序
操作:

bash
复制
ZINCRBY tags 1 “python” # 标签热度+1
ZREVRANGE tags 0 4 # 获取Top5标签
7. 滑动窗口统计
场景:统计最近1小时的请求量
实现:

bash
复制
ZADD requests 1629999999 “req1” # 分数=请求时间戳
ZREMRANGEBYSCORE requests -inf <1小时前的时间戳> # 清理旧数据
ZCARD requests # 统计当前请求数
Sorted Set 核心优势
特性 说明
自动排序 插入时自动按分数排序(O(log N) 复杂度)
高效范围查询 ZRANGEBYSCORE、ZRANK 等操作性能优异
去重 成员唯一,适合需要唯一性约束的场景(如用户投票)
灵活性 分数可重复(如多人同分),成员不可重复
与其他结构对比
需求 String List Hash Set ZSet
需要排序 ❌ ❌ ❌ ❌ ✅
范围查询 ❌ ⚠️ ❌ ❌ ✅
去重 ❌ ❌ ❌ ✅ ✅
权重/分数关联 ❌ ❌ ❌ ❌ ✅
性能注意事项
单 ZSet 建议元素数小于 1万(大数据量时考虑分片)

分数(score)支持 64位浮点数,范围 -9007199254740992 到 9007199254740992

大数据量范围查询时,优先用 ZSCAN 替代 ZRANGE 避免阻塞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

18-21源码剖析——Mybatis整体架构设计、核心组件调用关系、源码环境搭建

学习视频资料来源&#xff1a;https://www.bilibili.com/video/BV1R14y1W7yS 文章目录 1. 架构设计2. 核心组件及调用关系3. 源码环境搭建3.1 测试类3.2 实体类3.3 核心配置文件3.4 映射配置文件3.5 遇到的问题 1. 架构设计 Mybatis整体架构分为4层&#xff1a; 接口层&#…

未启用CUDA支持的PyTorch环境** 中使用GPU加速解决方案

1. 错误原因分析 根本问题&#xff1a;当前安装的PyTorch是CPU版本&#xff0c;无法调用GPU硬件加速。当运行以下代码时会报错&#xff1a;model YOLO("yolov8n.pt").to("cuda") # 或 .cuda()2. 解决方案步骤 步骤1&#xff1a;验证CUDA可用性 在Pyth…

JVM-基于Hotspot

前言 Java虚拟机&#xff08;Java Virtual Machine简称JVM&#xff09;是运行所有Java程序的抽象计算机&#xff0c;是Java语言的运行环境&#xff0c;其主要任务为将字节码装载到内部&#xff0c;解释/编译为对应平台上的机器指令执行。 Java虚拟机规范定义了一个抽象的——…

智能合约安全审计平台——可视化智能合约漏洞扫描

目录 可视化智能合约漏洞扫描 —— 理论、实践与安全保障1. 引言2. 理论背景与漏洞原理2.1 智能合约简介2.2 常见漏洞类型2.3 漏洞扫描与安全评估原理3. 系统架构与工作流程3.1 系统总体架构3.2 模块说明4. 漏洞扫描流程详解4.1 代码上传与静态解析4.2 漏洞模式检测4.3 风险评估…

【MySQL数据库】数据类型详解

目录 数据类型tinyint类型(整形)bit类型小数浮点数 float、doubledecimal 字符串类型charvarcharchar与varchar的比较 日期时间类型enum和set总结 数据类型 tinyint类型(整形) 例&#xff1a; mysql> create table tt1(num tinyint);mysql> insert into tt1 values(1)…

咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包

咪咕MG101_晨星MSO9380芯片_安卓5.1.1_免拆卡刷固件包&#xff08;内有教程&#xff09; 刷机教程简单说明&#xff1a; 1、把下载好的刷机包&#xff0c;U盘里建立一个upgrade文件夹&#xff0c;固件放入此文件夹里&#xff0c;放入U盘中&#xff0c;注意升级包为压缩包不要对…

CS61A:STRING REPRESENTATION

Python 规定所有对象都应该产生两种不同的字符串表示形式&#xff1a;一种是人类可解释的文本&#xff0c;另一种是 Python 可解释的表达式。字符串的构造函数 str 返回一个人类可读的字符串。在可能的情况下&#xff0c;repr 函数会返回一个计算结果相等的 Python 表达式。rep…

LangChain缓存嵌入技术完全指南:CacheBackedEmbedding原理与实践(附代码示例)

一、嵌入缓存技术背景与应用场景 1.1 为什么需要嵌入缓存&#xff1f; 算力消耗问题&#xff1a;现代嵌入模型&#xff08;如text-embedding-3-small&#xff09;单次推理需要约0.5-1秒/文本 资源浪费现状&#xff1a;实际业务中约30%-60%的文本存在重复计算 成本压力&#…

精益数据分析(3/126):用数据驱动企业发展的深度解析

精益数据分析&#xff08;3/126&#xff09;&#xff1a;用数据驱动企业发展的深度解析 大家好&#xff01;一直以来&#xff0c;我都坚信在当今竞争激烈的商业环境中&#xff0c;数据是企业获得竞争优势的关键。最近深入研究《精益数据分析》这本书&#xff0c;收获颇丰&…

wpf ScaleTransform

在WPF中&#xff0c;ScaleTransform是用于实现元素缩放的核心类&#xff0c;属于System.Windows.Media命名空间下的变换类型。以下是其主要特性与使用方式的总结&#xff1a; ‌核心属性‌ ‌缩放比例‌ ScaleX&#xff1a;水平方向缩放比例&#xff08;默认1.0&#xff0c;即…

用纯Qt实现GB28181协议/实时视频/云台控制/预置位/录像回放和下载/事件订阅/语音对讲

一、前言 在技术的长河中探索&#xff0c;有些目标一旦确立&#xff0c;便如同璀璨星辰&#xff0c;指引着我们不断前行。早在2014年&#xff0c;我心中就种下了用纯Qt实现GB28181协议的种子&#xff0c;如今回首&#xff0c;一晃十年已逝&#xff0c;好在整体框架和逻辑终于打…

0x01、Redis 主从复制的实现原理是什么?

Redis 主从复制概述 Redis 的主从复制是一种机制&#xff0c;允许一个主节点&#xff08;主实例&#xff09;将数据复制到一个或多个从节点&#xff08;从实例&#xff09;。通过这一机制&#xff0c;从节点可以获取主节点的数据并与之保持同步。 复制流程 开始同步&#xf…

整活 kotlin + springboot3 + sqlite 配置一个 SQLiteCache

要实现一个 SQLiteCache 也是很简单的只需要创建一个 cacheManager Bean 即可 // 如果配置文件中 spring.cache.sqlite.enable false 则不启用 Bean("cacheManager") ConditionalOnProperty(name ["spring.cache.sqlite.enable"], havingValue "t…

深入探索如何压缩 WebAssembly

一、初始体积&#xff1a;默认 Release 构建 我们从最基础的构建开始&#xff0c;不开启调试符号&#xff0c;仅使用默认的 release 模式&#xff1a; $ wc -c pkg/wasm_game_of_life_bg.wasm 29410 pkg/wasm_game_of_life_bg.wasm这是我们优化的起点 —— 29,410 字节。 二…

多角度分析Vue3 nextTick() 函数

nextTick() 是 Vue 3 中的一个核心函数&#xff0c;它的作用是延迟执行某些操作&#xff0c;直到下一次 DOM 更新循环结束之后再执行。这个函数常用于在 Vue 更新 DOM 后立即获取更新后的 DOM 状态&#xff0c;或者在组件渲染完成后执行某些操作。 官方的解释是&#xff0c;当…

前端面试-自动化部署

基础概念 什么是CI/CD&#xff1f;在前端项目中如何应用&#xff1f;自动化部署相比手动部署有哪些优势&#xff1f;常见的自动化部署工具有哪些&#xff1f;举例说明它们的区别&#xff08;如Jenkins vs GitHub Actions&#xff09;。如何通过Git Hook实现自动化部署&#xf…

架构生命周期(高软57)

系列文章目录 架构生命周期 文章目录 系列文章目录前言一、软件架构是什么&#xff1f;二、软件架构的内容三、软件设计阶段四、构件总结 前言 本节讲明架构设计的架构生命周期概念。 一、软件架构是什么&#xff1f; 二、软件架构的内容 三、软件设计阶段 四、构件 总结 就…

GPTNet如何革新创意与效率

引言 人工智能正在以前所未有的速度改变我们的工作与生活方式&#xff0c;从智能写作到视觉创作&#xff0c;AI工具已成为不可或缺的伙伴。在众多平台中&#xff0c;GPTNet以其强大的功能整合和直观体验崭露头角。它不仅汇集了GPT系列、Claude、Grok、Gemini等顶级对话模型&am…

【计网】SSL/TLS核心原理

序言 在HTTP协议中&#xff0c;信息是明文传输的&#xff0c;因此为了通信安全就有了HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)协议。HTTPS也是一种超文本传送协议&#xff0c;在HTTP的基础上加入了SSL/TLS协议&#xff0c;SSL/TLS依靠证书来验证服务端的…

Web Components 开发与集成

以下是关于 Web Components 开发与集成 的系统知识梳理,涵盖核心概念、高级特性、集成与优化等内容: 一、Web Components 核心概念 技术作用核心 APICustom Elements定义可复用的自定义 HTML 元素customElements.define()、生命周期钩子(connectedCallback 等)Shadow DOM封…