*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"

*常见错误

  1. 范围写反:min > max 时返回 0,不报错但无效果。

*最佳实践

  1. 滑动窗口清理:定时任务执行 ZREMRANGEBYSCORE 清理过期 score(如时间戳),保留最近 N 天的数据。
  2. 排行榜淘汰:移除低分区间的成员,保持排行榜规模可控。

*FAQ

Q: ZREMRANGEBYSCORE 会删除 key 吗? A: 当 Sorted Set 最后一个 member 被移除后,key 自动删除。

Q: 支持开区间吗? A: 支持,用 (min(max 表示不包含边界。