首页/数据/数据库速查/ZRANGEBYSCORE / ZCOUNT 分数区间与计数
Redis 命令96 条

ZRANGEBYSCORE / ZCOUNT 分数区间与计数

按分数区间取成员:支持开区间标记(如 (100)、-inf/+inf、LIMIT 分页;ZCOUNT 快速统计区间内成员数。

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

ZRANGEBYSCORE 与 ZCOUNT 是什么

ZRANGEBYSCORE 按分数区间升序取成员,支持开区间语法(值前加括号表示不含边界)与正负无穷,还能用 LIMIT 做分页;ZCOUNT 只统计区间内的成员个数,不返回成员内容。区间是否包含边界完全由括号决定,写错会多出或少掉边界元素,这是最常见的误用。

基本信息

语法ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
开区间值前加括号,如 (100 表示大于 100
无穷标记-inf 与 +inf 分别表示负无穷与正无穷
计数命令ZCOUNT key min max,仅返回个数
排序方向本命令升序;倒序用 ZREVRANGEBYSCORE

典型使用场景

  • 分数段取数:取成绩、价格或评分某区间的成员
  • 延迟任务:用执行时间戳作分数,取已到期的任务
  • 分页导出:用 LIMIT 逐步导出区间数据
  • 区间统计:ZCOUNT 算某分数段人数,用于看板
  • 巡检核对:确认某区间是否有异常多的成员
  • 滑动窗口:按时间戳区间统计最近 N 分钟的行为

示例

示例
ZADD log 100 t1 200 t2 300 t3 400 t4
ZRANGEBYSCORE log 100 300          # 返回 t1 t2 t3,包含两端
ZRANGEBYSCORE log (100 300         # 返回 t2 t3,左端不含
ZRANGEBYSCORE log -inf +inf WITHSCORES
ZRANGEBYSCORE log 100 400 LIMIT 1 2    # 分页:跳过 1 个取 2 个
ZCOUNT log 100 300                 # 返回 3,只统计个数
ZREVRANGEBYSCORE log +inf -inf LIMIT 0 10   # 倒序取前 10
ZRANGEBYSCORE log 1758000000 +inf LIMIT 0 100  # 时间戳分数取到期任务

语法片段读法

写法含义误用后果
100包含边界 100与 (100 混用时多出边界成员
(100不包含 100想要包含却写了括号会漏掉成员
-inf / +inf负无穷与正无穷写成 0 会错误截断区间
LIMIT offset count跳过 offset 个再取 count 个与排名分页混用会重复取数
用时间戳分数做范围查询(最近 N 分钟日志)时,offset 会随新数据写入不断漂移,游标式翻页比按页码翻页更稳定。
LIMIT 的 offset 仍按偏移逐条扫描,深分页效率低;已知下次起始分数时直接以该分数为 min 继续取,比分页偏移更高效。
区间查询配合 ZREMRANGEBYSCORE 可以做周期性清理:例如取完已到期的任务后立即删除,避免集合无限增长;清理范围要按已确认处理完成的区间来定。

易错点

  • 忘记括号语义,边界成员被多算或少算,统计结果与预期不符
  • 用 0 代替 -inf 做区间下界,负分数据被静默排除
  • 把 ZRANGEBYSCORE 当倒序命令使用,取出的顺序与展示需求相反
  • 时间戳区间查询用分页 offset 翻页,新数据写入后出现重复或漏读
  • 对超大区间直接 WITHSCORES 全量取数,返回体积大且耗时明显

数据来源与参考

  • Redis 官方文档: ZRANGEBYSCORE
  • Redis 官方文档: ZCOUNT

相关工具

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