*Redis ZRANGEBYSCORE 命令

返回 Sorted Set 中 score 在指定范围内的成员,按 score 从小到大排序。


*语法

ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

*参数说明

参数 类型 必填 说明
key String Sorted Set 的键名
min Double/String 最小 score,-inf 表示负无穷;( 表示不包含边界
max Double/String 最大 score,+inf 表示正无穷;( 表示不包含边界
WITHSCORES 标志 同时返回 score
LIMIT Integer offset 和 count,分页用

*返回值

条件 返回值
有匹配 成员数组
无匹配/key 不存在 空数组 []

*时间复杂度

O(log(N)+M),N 为成员数量,M 为返回数量。


*示例

> ZADD leaderboard 100 "p1" 200 "p2" 300 "p3" 400 "p4"
(integer) 4

# score 100-300(包含边界)
> ZRANGEBYSCORE leaderboard 100 300
1) "p1"
2) "p2"
3) "p3"

# 不包含 100
> ZRANGEBYSCORE leaderboard (100 300
1) "p2"
2) "p3"

# 无穷范围
> ZRANGEBYSCORE leaderboard 250 +inf
1) "p3"
2) "p4"

# 分页
> ZRANGEBYSCORE leaderboard 100 400 LIMIT 1 2
1) "p2"
2) "p3"

*常见错误

  1. Redis 6.2+ 推荐使用 ZRANGE BYSCORE:ZRANGEBYSCORE 已废弃。

*最佳实践

  1. 时间范围查询:score 为时间戳时,ZRANGEBYSCORE 查询时间段数据。
  2. Redis 6.2+ 统一用 ZRANGEZRANGE key min max BYSCORE 替代。

*FAQ

Q: ZRANGEBYSCORE 和 ZRANGE BYSCORE 有什么区别? A: 效果相同。ZRANGEBYSCORE 是旧命令,6.2+ 推荐 ZRANGE ... BYSCORE

Q: (min 是什么意思? A: 圆括号表示不包含边界。(100 300 表示 score > 100 且 <= 300。