*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 信息键值对
    • 基本字段:lengthradix-tree-keysradix-tree-nodesgroupslast-generated-idmax-deleted-entry-identries-addedfirst-entrylast-entry
    • IDMP 字段(配置后):idmp-durationidmp-maxsizepids-trackediids-trackediids-addediids-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-keysradix-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-addedlength 为什么不一致? A: entries-added 是 Stream 创建以来写入的总消息数(包含已被删除的);length 是当前实际存在的消息数。