*Redis XINFO 命令
XINFO 是 Stream 内省命令的容器,用于查看 Stream、消费者组、消费者的详细信息和元数据。
*语法
XINFO 包含以下子命令:
XINFO STREAM key [FULL [COUNT count]]
XINFO GROUPS key
XINFO CONSUMERS key groupname
XINFO HELP
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Stream 键名 |
| groupname | String | 是 | 消费者组名称(CONSUMERS 子命令) |
| FULL | Flag | 否 | 输出完整信息,包括消费者详细信息 |
| COUNT | Integer | 否 | 限制 FULL 输出的消费者数量 |
*返回值
各子命令返回值不同:
- STREAM:返回 Stream 元数据数组(长度、基数树节点数、最后生成 ID、第一个条目、最后一个条目等)
- GROUPS:返回消费者组数组,每个组包含名称、消费者数量、PEL 数量、最后投递 ID 等
- CONSUMERS:返回消费者数组,每个消费者包含名称、待处理数量、空闲时间等
- HELP:返回帮助文本数组
*时间复杂度
- XINFO STREAM / XINFO GROUPS / XINFO CONSUMERS:O(1) - XINFO STREAM FULL:O(N),N 为消费者数量(受 COUNT 限制)
*示例
*查看 Stream 信息
> XINFO STREAM mystream
1) "length"
2) (integer) 2
3) "radix-tree-keys"
4) (integer) 1
5) "radix-tree-nodes"
6) (integer) 2
7) "last-generated-id"
8) "1638125140000-0"
9) "max-deleted-entry-id"
10) "0-0"
11) "entries-added"
12) (integer) 2
13) "recorded-first-entry-id"
14) "1638125130000-0"
15) "groups"
16) (integer) 1
17) "first-entry"
18) 1) "1638125130000-0"
2) 1) "field1"
2) "value1"
19) "last-entry"
20) 1) "1638125140000-0"
2) 1) "field2"
2) "value2"
*查看消费者组
> XINFO GROUPS mystream
1) 1) "name"
2) "mygroup"
3) "consumers"
4) (integer) 2
5) "pending"
6) (integer) 5
7) "last-delivered-id"
8) "1638125140000-0"
*查看消费者
> XINFO CONSUMERS mystream mygroup
1) 1) "name"
2) "consumer1"
3) "pending"
4) (integer) 3
5) "idle"
6) (integer) 15000
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR wrong number of arguments | 缺少 key 或 groupname | 检查子命令参数 |
| NOGROUP No such consumer group | 消费者组不存在 | 确认 groupname 正确 |
*最佳实践
- 使用 XINFO STREAM 监控 Stream 增长情况,及时设置 XTRIM 策略
- 使用 XINFO GROUPS 监控消费者组数量和 PEL 积压情况
- 使用 XINFO CONSUMERS 发现长时间空闲或积压过多消息的消费者
- 配合 MONITOR 或定期巡检,将 XINFO 指标采集到监控系统
*FAQ
Q1: XINFO STREAM 和 XLEN 有什么区别? A: XLEN 仅返回 Stream 条目数;XINFO STREAM 返回完整的元数据,包括条目数、节点数、消费者组数、首尾条目等。
Q2: entries-read 和 lag 字段是什么?
A: Redis 7.0+ 新增字段。entries-read 表示消费者组已读取的条目数;lag 表示待消费的消息数量(积压量)。
Q3: 如何判断 Stream 是否需要扩容或清理?
A: 关注 XINFO STREAM 的 length 和 entries-added,结合内存使用和业务需求,设定 XTRIM 或 MAXLEN 策略。