首页/数据/数据库速查/ZREVRANGE 倒序取值(排行榜标准姿势)
Redis 命令96 条

ZREVRANGE 倒序取值(排行榜标准姿势)

按分数从高到低取成员:ZREVRANGE key 0 9 WITHSCORES 就是 Top10;旧命令族仍广泛使用,新代码可用 ZRANGE REV 替代。

数据库速查数据更新于 2026-10-13

ZREVRANGE 是什么

ZREVRANGE 从有序集合中按分数从高到低取成员:ZREVRANGE key 0 9 WITHSCORES 就是 Top10,索引从 0 开始、-1 表示最后一个。它按排名取数,与按分数区间取数的 ZREVRANGEBYSCORE 是两类用法。旧命令族至今仍被广泛使用,Redis 6.2 起也可以用 ZRANGE key start stop REV 达到同样效果。

基本信息

适用版本ZREVRANGE 全版本;ZRANGE 加 REV 参数需 6.2+
语法ZREVRANGE key start stop [WITHSCORES]
索引约定0 为第一名,-1 为最后一名
耗时特征O(logN + M),M 为返回元素个数
相关命令ZREVRANK / ZREVRANGEBYSCORE / ZCOUNT / ZINCRBY

典型使用场景

  • 排行榜 TopN:取前 10 名并带上分数直接渲染
  • 榜单分页:按页计算 start 与 stop,避免一次取回全部成员
  • 并列名次核对:用 ZREVRANK 查某个成员的具体名次
  • 区间倒序:用 ZREVRANGEBYSCORE key +inf -inf LIMIT 0 10 按分数倒序取
  • 成绩累计:用 ZINCRBY 更新分数后立即读取最新排名
  • 定长榜单:配合 ZREMRANGEBYRANK 只保留前 N 名,控制内存

示例

示例
ZADD board 100 u1 200 u2 300 u3
ZREVRANGE board 0 1               # 返回 u3 u2(分数最高的两个)
ZREVRANGE board 0 1 WITHSCORES    # 返回 u3 300 u2 200
ZREVRANGEBYSCORE board +inf -inf LIMIT 0 10   # 按分数降序取前 10
ZREVRANK board u1                 # 返回 2,即倒序第 3 名
ZCOUNT board 200 300              # 分数在区间内的成员数
ZREMRANGEBYRANK board 100 -1      # 只保留前 100 名,防止榜单无限增长

命令对照

命令排序与取值典型用途
ZREVRANGE按排名倒序取区间TopN 与分页
ZRANGE按排名顺序取,6.2+ 可加 REV从小到大取榜尾或低分列表
ZREVRANGEBYSCORE按分数区间倒序取只要高分区间、忽略名次
ZREVRANK查成员倒序名次显示「当前第几名」
同分并列时按成员字典序排列:想要「先到先得」的并列顺序,需要把时间戳作为分数的小数部分或改用复合分数。
ZREVRANGE 的耗时随返回元素数增长,用 0 -1 取全量榜单在大集合上是危险操作;分页取数或用 ZREMRANGEBYRANK 维护定长榜单更稳妥。
ZREVRANGE 的分页参数是排名区间而非页码:第 N 页对应 start 为 N 减 1 乘每页条数、stop 为 start 加条数减 1;榜单实时变化时相邻页之间可能出现重复成员,导出与对账应改用分数区间加游标。
ZREVRANGE 与 ZREVRANK 返回的名次都是 0 基,展示给用户时要加 1;两者混用时最容易出现「第 0 名」这类一眼可见的错误。

易错点

  • 用 ZREVRANGE key 0 -1 取全量榜单,成员数上万时单次命令耗时明显
  • 分页时把 start 与 stop 算错,出现重复或漏掉成员
  • 成员分数用浮点累加,长期运行后出现精度误差导致名次错乱
  • 排行榜只增不减,没有 ZREMRANGEBYRANK 或过期策略,内存持续上涨
  • 把并列成员当作固定顺序展示,忽略同分时按字典序排列的规则

数据来源与参考

  • Redis 官方文档: ZREVRANGE
  • Redis 官方文档: ZRANGE(REV)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌