*Redis XDEL 命令
删除 Stream 中指定 ID 的消息。
*语法
XDEL key ID [ID ...]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Stream 键名 |
| ID | String | 是 | 消息 ID,可一次删除多个 |
*返回值
| 条件 | 返回值 |
|---|---|
| 删除成功 | 实际删除的消息数量(Integer) |
| ID 不存在 | 不计入返回值 |
*时间复杂度
O(1)(单个 ID),O(N)(N 个 ID)。
*示例
> XADD mystream * temp 20
"1717000000000-0"
> XADD mystream * temp 21
"1717000000001-0"
> XDEL mystream 1717000000000-0
(integer) 1
> XRANGE mystream - +
1) 1) "1717000000001-0"
2) 1) "temp"
2) "21"
*常见错误
- ID 不存在返回 0:不报错,只返回实际删除数量。
*最佳实践
- 消息清理:消费者确认后(XACK)用 XDEL 删除已处理的消息,释放内存。
- 注意:XDEL 删除后 XLEN 减少,但内部 Radix Tree 节点可能仍占用内存,直到被 MAXLEN/MINID 截断彻底清理。
*FAQ
Q: XDEL 和 XTRIM 有什么区别? A: XDEL 删除指定 ID 的消息;XTRIM 按 MAXLEN 或 MINID 截断,批量删除最旧消息。
Q: XDEL 后消息真的消失了吗? A: 逻辑上已删除(不再被读取),但内存可能未立即释放。Stream 的内存回收机制会渐进清理。