*Redis ZREVRANGEBYSCORE 命令
返回 Sorted Set 中 score 在指定范围内的成员,按 score 从大到小排序。
*语法
ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Sorted Set 键名 |
| max | Double/String | 是 | 最大 score,+inf 表示无穷大,( 表示开区间 |
| min | Double/String | 是 | 最小 score,-inf 表示无穷小 |
| WITHSCORES | 标志 | 否 | 同时返回 score |
| LIMIT | Integer | 否 | offset 和 count,分页 |
*返回值
| 条件 | 返回值 |
|---|---|
| 有成员 | 成员数组(WITHSCORES 时 [member, score, ...]) |
| 无成员 | 空数组 [] |
*时间复杂度
O(log(N)+M),N 为成员数,M 为返回数量。
*示例
> ZADD scores 85 "Alice" 92 "Bob" 78 "Charlie" 95 "David" 88 "Eve"
(integer) 5
# 高分到低分,score 90-100
> ZREVRANGEBYSCORE scores 100 90 WITHSCORES
1) "David"
2) "95"
3) "Bob"
4) "92"
# 开区间 (90, 100]
> ZREVRANGEBYSCORE scores 100 (90 WITHSCORES
1) "David"
2) "95"
# 分页
> ZREVRANGEBYSCORE scores +inf -inf LIMIT 0 3
1) "David"
2) "Bob"
3) "Eve"
*常见错误
- min > max:返回空数组。
*最佳实践
- 反向范围查询:需要按 score 从大到小查询范围时使用,如"查询 90 分以上的学生(从高到低)"。
*FAQ
Q: ZREVRANGEBYSCORE 和 ZRANGEBYSCORE 有什么区别? A: ZREVRANGEBYSCORE 按 score 从大到小返回;ZRANGEBYSCORE 从小到大。注意参数顺序也相反(先 max 后 min)。