*Redis ZREM 命令
移除 Sorted Set 中的一个或多个成员。
*语法
ZREM key member [member ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Sorted Set 的键名 |
| member | String | 是 | 要移除的成员,可一次移除多个 |
*返回值
| 条件 | 返回值 |
|---|---|
| 成功移除的成员数量 | 整数 |
| member 不存在 | 不计入 |
| key 不存在 | 0 |
*时间复杂度
O(M*log(N)),M 为移除成员数量,N 为 Sorted Set 成员数量。
*示例
> ZADD leaderboard 100 "p1" 200 "p2" 300 "p3"
(integer) 3
> ZREM leaderboard p2
(integer) 1
# 批量移除
> ZREM leaderboard p1 p3
(integer) 2
# 移除不存在的成员
> ZREM leaderboard p4
(integer) 0
> ZCARD leaderboard
(integer) 0
*常见错误
- 对非 Sorted Set 类型使用:返回 WRONGTYPE。
- member 不存在:返回 0,不报错。
*最佳实践
- 排行榜淘汰:定期移除低分成员,保持排行榜长度可控。
- 批量移除:一次 ZREM 多个 member,减少网络往返。
- 范围移除:按 score 范围批量移除用
ZREMRANGEBYSCORE key min max。
*FAQ
Q: ZREM 会删除 key 吗? A: 当 Sorted Set 最后一个 member 被移除后,key 自动删除。
Q: 如何按 score 范围移除?
A: 使用 ZREMRANGEBYSCORE key min max 或 ZREMRANGEBYRANK key start stop。
Q: ZREM 和 SREM 有什么区别? A: ZREM 操作 Sorted Set,按 member 移除;SREM 操作 Set,按 member 移除。两者都不关心 score/顺序。