*Redis XINFO STREAM 命令
XINFO STREAM 用于返回指定 Stream 的详细统计信息,包括长度、radix tree 结构、消费组数量和首尾条目等。
*语法
XINFO STREAM key [FULL [COUNT count]]
*参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Stream 键名 |
| FULL | Flag | 否 | 返回扩展信息,包括 entries 数组和各消费组的完整状态 |
| COUNT count | Integer | 否 | FULL 模式下限制 entries 和 pending 返回数量,默认 10;0 表示全部 |
*返回值
- Array:Stream 信息键值对
- 基本字段:
length、radix-tree-keys、radix-tree-nodes、groups、last-generated-id、max-deleted-entry-id、entries-added、first-entry、last-entry - IDMP 字段(配置后):
idmp-duration、idmp-maxsize、pids-tracked、iids-tracked、iids-added、iids-duplicates - FULL 附加字段:
entries(条目数组)、groups(消费组详情数组,含 pending 和 consumers)
- 基本字段:
- Error:key 不存在、不是 Stream 等
*时间复杂度
O(1)
*
*示例
*基本信息
> XADD mystream * message apple
"1638125133432-0"
> XADD mystream * message banana
"1638125141232-0"
> 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) "1638125141232-0"
9) "max-deleted-entry-id"
10) "0-0"
11) "entries-added"
12) (integer) 2
13) "groups"
14) (integer) 0
15) "first-entry"
16) 1) "1638125133432-0"
2) 1) "message"
2) "apple"
17) "last-entry"
18) 1) "1638125141232-0"
2) 1) "message"
2) "banana"
*FULL 扩展信息
> XGROUP CREATE mystream mygroup 0-0
OK
> XREADGROUP GROUP mygroup Alice COUNT 1 STREAMS mystream >
...
> XINFO STREAM mystream FULL
1) "length"
2) (integer) 2
...
15) "entries"
16) 1) 1) "1638125133432-0"
2) 1) "message"
2) "apple"
...
17) "groups"
18) 1) 1) "name"
2) "mygroup"
3) "last-delivered-id"
4) "1638125133432-0"
5) "entries-read"
6) (integer) 1
7) "lag"
8) (integer) 1
9) "pel-count"
10) (integer) 1
11) "pending"
12) 1) 1) "1638125133432-0"
2) "Alice"
3) (integer) 1638125153423
4) (integer) 1
13) "consumers"
14) 1) 1) "name"
2) "Alice"
3) "seen-time"
4) (integer) 1638125133422
5) "active-time"
6) (integer) 1638125133432
7) "pel-count"
8) (integer) 1
9) "pending"
10) 1) 1) "1638125133432-0"
2) (integer) 1638125133432
3) (integer) 1
*带 IDMP 配置的 Stream
> XCFGSET mystream IDMP-DURATION 100 IDMP-MAXSIZE 100
OK
> XINFO STREAM mystream
...
13) "idmp-duration"
14) (integer) 100
15) "idmp-maxsize"
16) (integer) 100
17) "pids-tracked"
18) (integer) 1
19) "iids-tracked"
20) (integer) 1
21) "iids-added"
22) (integer) 1
23) "iids-duplicates"
24) (integer) 0
...
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR no such key | key 不存在 | 确认 key 名称正确 |
| WRONGTYPE | key 不是 Stream | 确认 key 的数据类型 |
*最佳实践
- 使用 XINFO STREAM 监控 Stream 增长趋势,结合
maxmemory-policy防止内存溢出 radix-tree-keys和radix-tree-nodes反映内部结构碎片化程度- FULL 模式配合 COUNT 限制返回量,避免大 Stream 导致阻塞
first-entry/last-entry可快速了解数据内容而不需要额外 XRANGE
*FAQ
Q1: XINFO STREAM 和 XLEN 有什么区别? A: XLEN 只返回 Stream 长度;XINFO STREAM 返回完整的元数据和统计信息。
Q2: FULL COUNT 0 有什么风险? A: COUNT 0 会返回全部 entries 和 pending,Stream 很大时可能占用大量内存和网络带宽,建议生产环境使用具体数值。
Q3: entries-added 和 length 为什么不一致?
A: entries-added 是 Stream 创建以来写入的总消息数(包含已被删除的);length 是当前实际存在的消息数。