XACKDEL
确认并删除流消费者组的一条或多条消息。
语法
XACKDEL key group [KEEPREF | DELREF | ACKED] IDS numids id [id ...]
引入版本:8.2.0
复杂度摘要:O(1)
确认并有条件地删除指定 key 处的流消费者组的一个或多个条目(消息)。
XACKDEL 结合了 Redis Streams 中 XACK 和 XDEL 的功能。它确认给定消费者组中指定的条目 ID,并同时尝试从流中删除相应的条目。
必需参数
key
流键的名称。
group
消费者组的名称。
IDS numids id [id ...]
IDS 块指定要确认和删除哪些条目: - numids:后面的 ID 数量 - id [id ...]:要确认和删除的一个或多个流条目 ID
可选参数
KEEPREF | DELREF | ACKED
指定在确认和删除条目时如何处理消费者组引用。从 Redis 8.2 开始可用。如果未指定选项,则默认使用 KEEPREF:
KEEPREF(默认):确认指定消费者组中的条目并从流中删除这些条目,但在所有消费者组的 PEL(待处理条目列表)中保留对这些条目的现有引用。DELREF:确认指定消费者组中的条目,从流中删除这些条目,同时从所有消费者组的待处理条目列表中删除对这些条目的所有引用,有效地清除条目的所有痕迹。如果条目 ID 不在流中,但存在悬空引用,则XACKDEL和DELREF仍会删除所有这些引用。ACKED:确认指定消费者组中的条目,并且仅删除所有消费者组读取并确认的条目。
当您想要在单个原子操作中确认条目处理和清理流时,此命令特别有用,从而提供对如何处理条目引用的细粒度控制。
[!NOTE] 当使用多个消费者组时,鼓励用户使用带有
ACKED选项的XACKDEL,而不是XACK和XDEL,以简化应用逻辑。
示例
> XADD mystream * field1 value1
"1755870377536-0"
> XADD mystream * field2 value2
"1755870387045-0"
> XGROUP CREATE mystream mygroup 0
OK
> XREADGROUP GROUP mygroup consumer1 COUNT 2 STREAMS mystream >
1) 1) "mystream"
2) 1) 1) "1755870377536-0"
2) 1) "field1"
2) "value1"
2) 1) "1755870387045-0"
2) 1) "field2"
2) "value2"
> XPENDING mystream mygroup
1) (integer) 2
2) "1755870377536-0"
3) "1755870387045-0"
4) 1) 1) "consumer1"
2) "2"
> XACKDEL mystream mygroup KEEPREF IDS 2 1755870377536-0 1755870387045-0
1) (integer) 1
2) (integer) 1
> XPENDING mystream mygroup
1) (integer) 0
2) (nil)
3) (nil)
4) (nil)
> XRANGE mystream - +
(empty array)
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ✅ 标准 |
✅ 标准 |
返回值
RESP2
以下之一:
RESP3
以下之一:
资料来源:Redis 官方 XACKDEL 文档;中文内容参考 Redis 文档许可。