*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-readlag 字段是什么? A: Redis 7.0+ 新增字段。entries-read 表示消费者组已读取的条目数;lag 表示待消费的消息数量(积压量)。

Q3: 如何判断 Stream 是否需要扩容或清理? A: 关注 XINFO STREAM 的 lengthentries-added,结合内存使用和业务需求,设定 XTRIM 或 MAXLEN 策略。