首页/数据/数据库速查/ZRANGE 按排名区间取值(含 REV/BYSCORE/BYLEX)
Redis 命令96 条

ZRANGE 按排名区间取值(含 REV/BYSCORE/BYLEX)

ZRANGE key start stop [WITHSCORES] 按排名取;6.2 起 REV 反转、BYSCORE/BYLEX 切换为按分数或字典序区间,统一了旧命令族。

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

范围读取是什么

有序集合的范围读取命令可以按排名取值,也可以按分数取值。按排名时给出起始与结束下标并支持负数;按分数时切换为区间模式,可以用圆括号表示开区间,并可配合分页参数。较新版本把反转顺序也统一到这条命令里,旧的反向读取与按分数读取命令都能用统一写法表达,新代码只需要记一种。

基本信息

用途按排名或分数区间读取有序集合
语法范围读取 键 起始 结束 [WITHSCORES] [REV] [BYSCORE|BYLEX] [LIMIT 偏移 数量]
排名模式按下标取值,支持负数,零为分数最小的成员
分数模式用区间边界表示,圆括号表示开区间
反转选项直接降序输出,取榜首的常用写法
分页限制分页参数只在分数或字典序模式下可用

典型使用场景

  • 排行榜取前若干名与末若干名
  • 取指定分数区间内的成员,例如某热度段的数据
  • 分页浏览榜单:按分数区间配合分页参数
  • 按时取延时任务:分数是时间戳,取到期范围
  • 查看某个成员的排名与分数
  • 反序取榜:让分数最高的排在最前

示例

示例
ZADD board 100 u1 200 u2 300 u3   # 写入三个成员
ZRANGE board 0 1   # 升序取前两个:u1 u2
ZRANGE board 0 -1 WITHSCORES   # 全量并带分数
ZRANGE board 0 1 REV   # 反序取前两个:u3 u2,才是真正的榜首
ZRANGE board (100 300 BYSCORE   # 分数大于 100 且小于等于 300
ZRANGE board -inf +inf BYSCORE LIMIT 0 10   # 分数区间加前十条

模式与返回读法

写法含义注意
键 0 1按排名的升序前两名分数最小的排在前面
键 0 1 REV反序前两名取榜首的标准写法
键 0 -1全部成员大集合慎用
分数区间模式按分数范围取成员圆括号表示开区间
字典序模式按成员字典序取适用于同分或全同分场景
分页参数分页返回仅分数与字典序模式可用
带分数返回结果附带分数返回条数翻倍,注意解析
新旧命令的对应关系是:反向读取等价于加反转选项,按分数读取等价于切换为分数模式;新代码统一用范围读取命令,能减少记忆负担也便于统一封装。
忘记加反转选项会导致榜单取到分数最低的成员,这是排行榜实现里最高频的错误,取值之前先确认排序方向。
分页参数只在分数与字典序模式下可用,纯排名区间使用分页参数会直接报语法错误,需要改用分数区间来做分页。

范围读取检查清单

  • 确认排序方向:升序还是反序
  • 确认取值依据:按排名还是按分数
  • 大集合避免全量读取,用区间与分页控制规模
  • 带分数返回时注意结果条数翻倍
  • 延时任务场景用当前时间作为区间边界
  • 单成员排名查询使用专门的排名命令
按分数分页时把上一页的边界分数作为下一页起点,可以避开排名分页在数据变动时出现的重复与遗漏,前提是成员分数稳定或变化可控。
查询某个成员的具体名次要用专门的排名命令,范围读取只能给出成员列表与分数,用它反推名次既慢又不准,分布式环境下还要考虑排名口径。

易错点

  • 忘记加反转选项:排行榜取到的是分数最低的成员,方向错误却看不出异常
  • 在纯排名模式使用分页参数:直接报语法错误,需要改成按分数区间分页
  • 对超大集合全量读取:一次性返回全部成员与分数,响应体积大且阻塞实例
  • 分数区间边界理解错:圆括号表示开区间,把开闭写反会多取或少取边界成员
  • 用范围读取做单成员排名查询:需要遍历结果,应改用专门的排名命令直接拿到名次与分数

数据来源与参考

  • Redis 官方文档: ZRANGE

相关工具

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