XPENDING

返回流消费者组的待处理条目列表中的信息和条目。

语法

XPENDING key group [[IDLE min-idle-time] start end count [consumer]]

引入版本:5.0.0

复杂度摘要:O(N)

通过消费者组从流中获取数据,并且不确认此类数据,会产生创建 待处理条目 的效果。这在 XREADGROUP 命令中得到了很好的解释,在我们的 Redis Streams简介 中甚至更好。 XACK 命令将立即从待处理条目列表 (PEL) 中删除待处理条目,因为一旦成功处理消息,消费者组就不再需要跟踪它并记住消息的当前所有者。

XPENDING 命令是检查挂起消息列表的接口,因此是一个非常重要的命令,用于观察和了解流消费者组发生的情况:哪些客户端处于活动状态、哪些消息等待消费,或者查看是否有空闲消息。此外,该命令与 XCLAIM 一起使用是为了实现对长时间失败的消费者的恢复,从而导致某些消息未被处理:不同的消费者可以声明该消息并继续。这在 流介绍 和 XCLAIM 命令页中有更好的解释,这里不再赘述。

必需参数

key

流键。

group

消费者组名称。

可选参数

如果没有可选参数,XPENDING 将返回摘要。提供 start、end 和 count 将返回扩展(详细)形式。

IDLE min-idle-time

过滤出至少闲置了这么长时间(以毫秒为单位)的消息。

start

要检查的 ID 范围的开始(包含在内)。使用 - 作为最小 ID。

end

要检查的 ID 范围的末尾(含)。使用 + 作为最大 ID。

count

返回消息的最大数量。

consumer

过滤给定消费者拥有的消息。

详细说明

XPENDING汇总表

当仅使用键名称和消费者组名称调用 XPENDING 时,它仅输出有关给定消费者组中待处理消息的摘要。在以下示例中,我们创建一个消费者组,并通过从具有 XREADGROUP 的组中读取内容立即创建一条待处理消息。

> XGROUP CREATE mystream group55 0-0
OK

> XREADGROUP GROUP group55 consumer-123 COUNT 1 STREAMS mystream >
1) 1) "mystream"
   2) 1) 1) 1526984818136-0
         2) 1) "duration"
            2) "1532"
            3) "event-id"
            4) "5"
            5) "user-id"
            6) "7782813"

我们期望消费者组 group55 的待处理条目列表现在有一条消息:名为 consumer-123 的消费者获取了该消息,但未确认其处理。简单的 XPENDING 表格将为我们提供以下信息:

> XPENDING mystream group55
1) (integer) 1
2) 1526984818136-0
3) 1526984818136-0
4) 1) 1) "consumer-123"
      2) "1"

在这种形式中,该命令输出该消费者组的待处理消息总数,为 1,后跟待处理消息中最小和最大的 ID,然后列出该消费者组中至少有一条待处理消息的每个消费者,以及它拥有的待处理消息的数量。

XPENDING 的扩展形式

摘要提供了很好的概述,但有时我们对细节感兴趣。为了查看具有更多关联信息的所有待处理消息,我们还需要传递一系列 ID,以类似的方式使用 XRANGE 和非可选 计数 参数来限制每次调用返回的消息数量:

> XPENDING mystream group55 - + 10
1) 1) 1526984818136-0
   2) "consumer-123"
   3) (integer) 196415
   4) (integer) 1

在扩展表单中,我们不再看到摘要信息,而是在待处理条目列表中显示每条消息的详细信息。 For each message four attributes are returned:

  1. 消息的ID。
  2. 获取消息且仍需确认的消费者的名称。我们将其称为消息的当前 业主。对于使用 XNACK 释放回组的消息,此字段将为空字符串。
  3. 自上次将此消息传递给此消费者以来经过的毫秒数。
  4. 该消息被发送的次数。

当其他消费者使用 XCLAIM 权利要求 消息时,或者当通过 XREADGROUP 再次传递消息时,当访问消费者组中消费者的历史记录时(请参阅 XREADGROUP 页面了解更多信息),传递计数器(数组中的第四个元素)会递增。

可以向命令传递附加参数,以便查看具有特定所有者的消息:

> XPENDING mystream group55 - + 10 consumer-123

但在上述情况下,输出将是相同的,因为我们只有单个消费者的待处理消息。然而,重要的是要记住,即使有来自许多消费者的许多待处理消息,这种由特定消费者过滤的操作也不是低效的:我们在全局和每个消费者都有一个待处理条目列表数据结构,因此我们可以非常有效地仅显示单个消费者的待处理消息。

空闲时间过滤器

还可以按空闲时间(以毫秒为单位)过滤待处理的流条目(对于一段时间未处理的 XCLAIMing 条目很有用):

> XPENDING mystream group55 IDLE 9000 - + 10
> XPENDING mystream group55 IDLE 9000 - + 10 consumer-123

第一种情况将返回整个组中空闲时间超过 9 秒的前 10 个(或更少)PEL 条目,而第二种情况仅返回 consumer-123 的 PEL 条目。

独家范围和迭代 PEL

XPENDING 命令允许迭代挂起的条目,就像 XRANGE 和 XREVRANGE 允许流的条目一样。您可以通过在上次读取的挂起条目的 ID 前面加上表示开放(独占)范围的 ( 字符来完成此操作,并向命令的后续调用证明它。

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
✅ 标准
✅ 主动-主动
✅ 标准
✅ 主动-主动

返回值

RESP2

  • 数组回复:根据调用 XPENDING 的方式不同的数据,如本页所述。

RESP3

  • 数组回复:根据调用 XPENDING 的方式不同的数据,如本页所述。

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