XINFO GROUPS

返回流的消费者组列表。

语法

XINFO GROUPS key

引入版本:5.0.0

复杂度摘要:O(1)

此命令返回存储在 key 的流的所有消费者组的列表。

默认情况下,仅为每个组提供以下信息:

  • 姓名:消费者组名称
  • 消费者:群组内消费者数量
  • 待定:组待处理条目列表(PEL)的长度,这些消息是已发送但尚未确认的消息
  • 最后交付 ID:最后交付给该组消费者的条目的ID
  • 条目读取:交付给组消费者的最后一个条目的逻辑“读取计数器”
  • 滞后:流中仍在等待传递给组消费者的条目数,如果无法确定该数字,则为 NULL。

必需参数

key

流键。

示例

> XINFO GROUPS mystream
1)  1) "name"
    2) "mygroup"
    3) "consumers"
    4) (integer) 2
    5) "pending"
    6) (integer) 2
    7) "last-delivered-id"
    8) "1638126030001-0"
    9) "entries-read"
   10) (integer) 2
   11) "lag"
   12) (integer) 0
2)  1) "name"
    2) "some-other-group"
    3) "consumers"
    4) (integer) 1
    5) "pending"
    6) (integer) 0
    7) "last-delivered-id"
    8) "1638126028070-0"
    9) "entries-read"
   10) (integer) 1
   11) "lag"
   12) (integer) 1

详细说明

消费群体滞后

给定消费者组的滞后是组的 entries_read 和流的 entries_added 之间范围内的条目数。换句话说,它是尚未交付给该组消费者的条目数量。

该指标的值和趋势有助于制定有关消费者群体的扩展决策。您可以通过向组中添加更多消费者来解决高滞后值问题,而低值可能表明您可以从组中删除消费者以缩小规模。

Redis 通过保留两个计数器来报告消费者组的滞后:添加到流中的所有条目的数量和消费者组进行的逻辑读取的数量。 The lag is the difference between these two.

流的计数器(XINFO STREAM 命令的 entries_added 字段)随着每个 XADD 增加 1,并对在其生命周期内添加到流的所有条目进行计数。

消费者组的计数器 entries_read 是该组已读取的条目的逻辑计数器。重要的是要注意,该计数器只是启发式计数器而不是准确计数器,因此使用术语“逻辑”。计数器尝试反映组 应该读过 达到其当前 last-delivered-id 的条目数。 entries_read 计数器仅在完美世界中准确,其中消费者组从流的第一个条目开始并处理其所有条目(即,在处理之前没有删除任何条目)。

有两种特殊情况该机制无法报告滞后:

  1. 使用任意最后传递的 ID 创建或设置消费者组(分别为 XGROUP CREATE 和 XGROUP SETID 命令)。任意 ID 是不是流的第一个条目、最后一个条目或零(“0-0”)ID 的 ID 的任何 ID。
  2. 组的 last-delivered-id 和流的 last-generated-id 之间的一个或多个条目被删除(使用 XDEL 或修剪操作)。

在这两种情况下,组的读取计数器都被视为无效,并且返回值被设置为 NULL 以表明滞后当前不可用。

However, the lag is only temporarily unavailable. It is restored automatically during regular operation as consumers keep processing messages.一旦消费者组将流中的最后一条消息传递给其成员,它将使用正确的逻辑读取计数器进行设置,并且可以恢复跟踪其滞后。

Redis Software 与 Redis Cloud 兼容性

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

返回值

RESP2

数组回复:消费者组列表。

RESP3

数组回复:消费者组列表。

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