*Redis XINFO CONSUMERS 命令

XINFO CONSUMERS 用于返回指定 Stream 消费组中所有消费者的详细信息,包括 pending 数量、idle 时间等。


*语法

XINFO CONSUMERS key group

*参数说明

参数 类型 必填 说明
key String Stream 键名
group String 消费组名称

*返回值

  • Array:每个消费者为一个子数组,包含以下字段
    • name:消费者名称
    • pending:该消费者的 pending 消息数量
    • idle:距上次尝试交互的毫秒数(XREADGROUP / XCLAIM / XAUTOCLAIM)
    • inactive:距上次成功交互的毫秒数(Redis 7.2+)
  • Error:key 不存在、不是 Stream、组不存在等

*时间复杂度

O(1)

*

*示例

*查看消费组消费者

> XADD mystream * msg hello
"1638125000000-0"
> XGROUP CREATE mystream mygroup 0
OK
> XREADGROUP GROUP mygroup Alice COUNT 1 STREAMS mystream >
...
> XINFO CONSUMERS mystream mygroup
1) 1) "name"
   2) "Alice"
   3) "pending"
   4) (integer) 1
   5) "idle"
   6) (integer) 9104628
   7) "inactive"
   8) (integer) 18104698

*多个消费者

> XREADGROUP GROUP mygroup Bob COUNT 1 STREAMS mystream >
...
> XINFO CONSUMERS mystream mygroup
1) 1) "name"
   2) "Alice"
   3) "pending"
   4) (integer) 1
   5) "idle"
   6) (integer) 9104628
   7) "inactive"
   8) (integer) 18104698
2) 1) "name"
   2) "Bob"
   3) "pending"
   4) (integer) 1
   5) "idle"
   6) (integer) 83841983
   7) "inactive"
   8) (integer) 993841998

*空闲消费者检测

> XINFO CONSUMERS mystream mygroup
1) 1) "name"
   2) "worker-1"
   3) "pending"
   4) (integer) 5
   5) "idle"
   6) (integer) 3600000
   7) "inactive"
   8) (integer) 3600000
# worker-1 已空闲 1 小时,可考虑用 XAUTOCLAIM 回收消息

*常见错误

错误 原因 解决
NOGROUP 消费组不存在 确认 group 名称正确
ERR no such key key 不存在 确认 key 名称正确
WRONGTYPE key 不是 Stream 确认 key 的数据类型

*最佳实践

  • 监控 idleinactive 值,识别挂掉的消费者
  • 结合 XPENDINGXAUTOCLAIM 实现自动故障转移
  • 消费者命名建议包含主机/进程信息,如 worker-node1-pid1234
  • pending 持续增长的消费者可能存在处理瓶颈或死锁

*FAQ

Q1: idle 和 inactive 有什么区别? A: idle 是距上次尝试交互的时间(包括未成功获取消息的 XREADGROUP);inactive 是距上次成功交互的时间(真正处理到消息)。Redis 7.2 之前只有 idle,含义等同于现在的 inactive

Q2: 消费者会过期消失吗? A: 消费者不会在超时后自动删除,即使长时间不活动也会保留在组内。如需清理,可使用 XGROUP DELCONSUMER

Q3: 刚创建的消费组为什么看不到消费者? A: 消费者只有在首次调用 XREADGROUP 后才会被注册到组内。