*Redis ZREMRANGEBYSCORE 命令
移除 Sorted Set 中 score 在指定范围内的所有成员。
*语法
ZREMRANGEBYSCORE key min max
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Sorted Set 的键名 |
| min | Double/String | 是 | 最小 score(同 ZRANGEBYSCORE) |
| max | Double/String | 是 | 最大 score |
*返回值
| 条件 | 返回值 |
|---|---|
| 移除成功 | 移除的成员数量(Integer) |
| key 不存在 | 0 |
*时间复杂度
O(log(N)+M),N 为成员数量,M 为被移除数量。
*示例
> ZADD timeline 1700000000 "event1" 1700000100 "event2" 1700000200 "event3"
(integer) 3
# 移除 24 小时前的数据(score < 1700000100)
> ZREMRANGEBYSCORE timeline -inf 1700000099
(integer) 1
> ZRANGE timeline 0 -1 WITHSCORES
1) "event2"
2) "1700000100"
3) "event3"
4) "1700000200"
*常见错误
- 范围写反:min > max 时返回 0,不报错但无效果。
*最佳实践
- 滑动窗口清理:定时任务执行 ZREMRANGEBYSCORE 清理过期 score(如时间戳),保留最近 N 天的数据。
- 排行榜淘汰:移除低分区间的成员,保持排行榜规模可控。
*FAQ
Q: ZREMRANGEBYSCORE 会删除 key 吗? A: 当 Sorted Set 最后一个 member 被移除后,key 自动删除。
Q: 支持开区间吗?
A: 支持,用 (min 和 (max 表示不包含边界。