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:
- 消息的ID。
- 获取消息且仍需确认的消费者的名称。我们将其称为消息的当前 业主。对于使用
XNACK释放回组的消息,此字段将为空字符串。 - 自上次将此消息传递给此消费者以来经过的毫秒数。
- 该消息被发送的次数。
当其他消费者使用 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 文档许可。