*Redis XINFO GROUPS 命令
XINFO GROUPS 用于返回指定 Stream 的所有消费组列表及其状态信息,包括消费者数量、pending 数量和消费延迟(lag)。
*语法
XINFO GROUPS key
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Stream 键名 |
*返回值
- Array:每个消费组为一个子数组,包含以下字段
name:消费组名称consumers:组内消费者数量pending:组 PEL 长度(未确认消息数)last-delivered-id:最后投递的条目 IDentries-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 深入分析具体消费者的负载
- 使用
pending和consumers评估组内平均负载
*FAQ
Q1: lag 为 NULL 是什么意思? A: 表示 Redis 无法准确计算消费延迟。常见原因:消费组创建时使用了非首/尾/零的任意 ID,或中间有消息被 XDEL 删除。随着消费者继续处理,lag 会自动恢复。
Q2: lag 很高怎么办? A: 高 lag 表示消息堆积,可通过增加消费者数量、优化处理逻辑或升级硬件来提升消费能力。
Q3: entries-read 和 Stream 实际消息数不一致?
A: entries-read 是逻辑计数器而非精确计数,在存在消息删除或组从中间位置开始时可能出现偏差,仅用于 lag 计算参考。