*Redis XPENDING 命令

XPENDING 返回消费者组待处理条目列表(PEL)的摘要信息或详细信息,包括已投递但未被确认的消息。


*语法

XPENDING key group [[IDLE min-idle-time] start end count [consumer]]

*参数说明

参数 类型 必填 说明
key String Stream 键名
group String 消费者组名称
IDLE Integer 最小空闲时间(毫秒),仅返回空闲时间大于此值的消息
start String 范围起始 ID(+-
end String 范围结束 ID(+-
count Integer 返回的最大消息数量
consumer String 仅返回指定消费者的待处理消息

*返回值

无额外参数时:

  • Array:包含 4 个元素:
    1. 待处理消息总数(Integer)
    2. 最小 ID(String)
    3. 最大 ID(String)
    4. 消费者数组,每个消费者包含名称和待处理数量

带范围参数时:

  • Array:待处理消息的详细信息数组,每个元素包含 ID、消费者、空闲时间、重试次数

*时间复杂度

  • 仅返回摘要且消费者数量少:O(1) - 返回详细信息:O(N),N 为返回的元素数量
  • 使用 IDLE 过滤时:O(M),M 为扫描的总条目数

*示例

*查看 PEL 摘要

> XPENDING mystream mygroup
1) (integer) 3
2) "1526569495631-0"
3) "1526569495633-0"
4) 1) 1) "consumer1"
      2) "2"
   2) 1) "consumer2"
      2) "1"

*查看详细待处理消息

> XPENDING mystream mygroup - + 10
1) 1) "1526569495631-0"
   2) "consumer1"
   3) (integer) 60000
   4) (integer) 1
2) 1) "1526569495632-0"
   2) "consumer1"
   3) (integer) 120000
   4) (integer) 2

*使用 IDLE 过滤

> XPENDING mystream mygroup IDLE 60000 - + 10
1) 1) "1526569495632-0"
   2) "consumer1"
   3) (integer) 120000
   4) (integer) 2

*常见错误

错误 原因 解决
ERR wrong number of arguments 参数不足或格式错误 检查 key、group 和可选参数格式
NOGROUP No such consumer group 消费者组不存在 先创建消费者组

*最佳实践

  • 定期调用 XPENDING 监控待处理消息数量,发现积压及时告警
  • 使用 IDLE 参数找出长时间未处理的消息,然后通过 XCLAIM 转移给其他消费者
  • 结合重试次数(delivery count)识别可能的问题消息,超过阈值可放入死信队列
  • 在生产环境中建议定时巡检 XPENDING,作为消费者健康度指标

*FAQ

Q1: XPENDING 返回的空闲时间(idle)是什么意思? A: 自消息最后一次被投递给某个消费者以来经过的毫秒数。如果消息被 XCLAIM,空闲时间会被重置。

Q2: 如何找出所有待处理消息? A: 使用 XPENDING key group - + 1000,返回最多 1000 条待处理消息的详细信息。

Q3: XPENDING 和 XINFO CONSUMERS 有什么区别? A: XPENDING 关注具体的消息条目;XINFO CONSUMERS 关注消费者级别的统计信息(如消费者总数、各自待处理数量)。