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

以下之一:

  • 数组回复:当给定键不存在时,每个请求的 ID 为 -1。
  • 数组回复:对于每个ID:
    • 整数回复:如果条目已被确认并从流中删除,则为 1。
    • 整数回复:如果提供的流键中不存在此类 ID,则为 -1。
    • 整数回复:如果条目已确认但未删除,则为 2,因为仍然存在悬空引用(ACKED 选项)。

RESP3

以下之一:

  • 数组回复:当给定键不存在时,每个请求的 ID 为 -1。
  • 数组回复:对于每个ID:
    • 整数回复:如果条目已被确认并从流中删除,则为 1。
    • 整数回复:如果提供的流键中不存在此类 ID,则为 -1。
    • 整数回复:如果条目已确认但未删除,则为 2,因为仍然存在悬空引用(ACKED 选项)。

资料来源:Redis 官方 XACKDEL 文档;中文内容参考 Redis 文档许可。