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

*常见错误

  1. ID 不存在返回 0:不报错,只返回实际删除数量。

*最佳实践

  1. 消息清理:消费者确认后(XACK)用 XDEL 删除已处理的消息,释放内存。
  2. 注意:XDEL 删除后 XLEN 减少,但内部 Radix Tree 节点可能仍占用内存,直到被 MAXLEN/MINID 截断彻底清理。

*FAQ

Q: XDEL 和 XTRIM 有什么区别? A: XDEL 删除指定 ID 的消息;XTRIM 按 MAXLEN 或 MINID 截断,批量删除最旧消息。

Q: XDEL 后消息真的消失了吗? A: 逻辑上已删除(不再被读取),但内存可能未立即释放。Stream 的内存回收机制会渐进清理。