讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Spring Boot中通过Redis实现排行榜功能_利用ZSet的zrevrange命令

酷伟小哥_3435

酷伟小哥_3435

发布时间:2026-06-17 07:00:28

|

865人浏览过

|

来源于php中文网

原创

ZSet 适合排行榜因支持按分排序与动态更新,操作复杂度为 O(log N);String 和 Hash 需全量读写或应用层排序,性能差。

如何在spring boot中通过redis实现排行榜功能_利用zset的zrevrange命令

为什么用 ZSet 而不是普通 String 或 Hash

排行榜本质是「按分数排序 + 支持动态更新」,ZSet 天然满足:每个成员(member)关联一个浮点型分数(score),自动按 score 降序/升序组织,插入、更新、查 Top N 都是 O(log N)。用 String 存 JSON 数组要全量读写、手动排序;Hash 没有内置排序能力,每次取 Top N 都得 HGETALL + 应用层排序,数据一多就卡。别图省事绕开 ZSet,否则后期改成本更高。

zrevrange 的实际调用方式和边界陷阱

Spring Data Redis 封装了 zrevrange,但直接调 redisTemplate.opsForZSet().reverseRange(...) 只能拿 member,不带 score;要 score 得用 reverseRangeWithScores(...)。常见错误是传错索引:比如想取前 10 名,却写成 0, 9(正确),但误写成 0, 10(会多拿 1 个,且当总分不足 11 时不会报错,容易漏掉边界逻辑)。另外,ZSet 索引从 0 开始,负数索引如 -1 表示最后一个元素——这点在分页查「后 10 名」时很有用,但新手常忽略。

  • 取 Top 10:用 reverseRangeWithScores("rank:game", 0, 9)
  • 查某用户排名(从 1 开始计数):用 reverseRank("rank:game", "user_123"),返回值是 Long 类型,注意判 null
  • 用户没上榜时 reverseRank 返回 null,不是 -1,别直接做算术运算

分数设计:用时间戳还是业务分?怎么避免并列问题

如果纯用业务分(如游戏积分),相同分数的成员会按字典序排——这会导致「同分用户排名不稳定」,尤其并发更新时。稳妥做法是把时间戳作为低 10 位补丁:例如 score = (long)(bizScore * 100000) + (System.currentTimeMillis() % 100000),保证严格单调。但注意:Redis ZSet score 是 double,超过 2^53 会丢失精度,所以不要把时间戳整个塞进去。另外,如果业务允许并列(如“并列第 3 名”),那就别加时间戳,改用 zrevrank + 前向扫描找相同 score 的第一个位置来算名次。

Spring Boot Actuator Analyzer
Spring Boot Actuator Analyzer

分析Spring Boot Actuator端点的安全性、健康检查、指标暴露及生产配置——审计信息、健康状态和自定义端点。

下载

性能和过期:排行榜要不要设 TTL?怎么批量清理冷数据

ZSet 本身不支持为单个 member 设过期,只能给整个 key 设 TTL。如果排行榜按天/周分区(如 rank:game:20240520),可以设 7 天 TTL,干净利落。但如果是长期榜(如“历史总榜”),就不能依赖 TTL,得主动清理:用 zremrangebyscore("rank:game", 0, 100) 删除低分段,或用 zremrangebyrank("rank:game", 0, -1001) 删掉垫底的 1000 名。注意 zremrangebyrank 的负索引是从末尾算,-1001 表示倒数第 1001 个往后的全部删掉——这个下标容易算反,建议先 zcard 查总数再算安全范围。

真正难的不是命令怎么写,而是分数生成策略和排名语义是否贴合业务。比如“实时榜”要防刷分,“历史榜”要考虑归档,这些都得在 ZSet 之上加一层控制,而不是指望 Redis 自己解决。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2351

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

437

2026.01.26

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4289

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

3795

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6892

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

623

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

736

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

6502

2024.04.07

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn