*Redis XINFO GROUPS 命令

XINFO GROUPS 用于返回指定 Stream 的所有消费组列表及其状态信息,包括消费者数量、pending 数量和消费延迟(lag)。


*语法

XINFO GROUPS key

*参数说明

参数 类型 必填 说明
key String Stream 键名

*返回值

  • Array:每个消费组为一个子数组,包含以下字段
    • name:消费组名称
    • consumers:组内消费者数量
    • pending:组 PEL 长度(未确认消息数)
    • last-delivered-id:最后投递的条目 ID
    • entries-read:逻辑读计数器(Redis 7.0+)
    • lag:待投递消息数,NULL 表示无法确定(Redis 7.0+)
  • Error:key 不存在、不是 Stream 等

*时间复杂度

O(1)

*

*示例

*查看 Stream 的消费组

> XADD mystream * msg hello
"1638126030001-0"
> XGROUP CREATE mystream mygroup 0
OK
> XINFO GROUPS mystream
1) 1) "name"
   2) "mygroup"
   3) "consumers"
   4) (integer) 0
   5) "pending"
   6) (integer) 0
   7) "last-delivered-id"
   8) "1638126030001-0"
   9) "entries-read"
  10) (integer) 1
  11) "lag"
  12) (integer) 0

*多个消费组

> XGROUP CREATE mystream group2 $
OK
> 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

*监控消费延迟

> XINFO GROUPS mystream
1) 1) "name"
   2) "mygroup"
   ...
   11) "lag"
   12) (integer) 1500
# lag 为 1500,表示有 1500 条消息待消费,需要扩容消费者

*常见错误

错误 原因 解决
ERR no such key key 不存在 确认 key 名称正确
WRONGTYPE key 不是 Stream 确认 key 的数据类型

*最佳实践

  • 定期监控 lag 指标,高 lag 表示消费能力不足,需扩容消费者
  • lag 为 NULL 通常是因为组创建时使用了任意 ID 或中间有消息被删除,属于正常现象
  • 结合 XINFO CONSUMERS 深入分析具体消费者的负载
  • 使用 pendingconsumers 评估组内平均负载

*FAQ

Q1: lag 为 NULL 是什么意思? A: 表示 Redis 无法准确计算消费延迟。常见原因:消费组创建时使用了非首/尾/零的任意 ID,或中间有消息被 XDEL 删除。随着消费者继续处理,lag 会自动恢复。

Q2: lag 很高怎么办? A: 高 lag 表示消息堆积,可通过增加消费者数量、优化处理逻辑或升级硬件来提升消费能力。

Q3: entries-read 和 Stream 实际消息数不一致? A: entries-read 是逻辑计数器而非精确计数,在存在消息删除或组从中间位置开始时可能出现偏差,仅用于 lag 计算参考。