首页/数据/Redis 进阶速查/XAUTOCLAIM:认领超时消息
数据结构与选型42 条

XAUTOCLAIM:认领超时消息

XAUTOCLAIM 把满足最小空闲时间的 pending 消息转移给当前消费者,用于消费者宕机后的消息回收,可配合 JUSTID 只取 ID。

Redis 进阶速查数据更新于 2026-10-13

认领超时消息

Stream 的消费者组会为每条已投递但未确认的消息登记一条 pending 记录,消费者一旦崩溃,这些消息就卡在那里没人处理。XAUTOCLAIM(Redis 6.2 起)按最小空闲时间把满足条件的 pending 消息批量转交给当前消费者,是消费者故障恢复的常用手段,比逐个 XCLAIM 省往返。

基本信息

语法XAUTOCLAIM key group consumer min-idle-time start [COUNT count] [JUSTID]
返回下一次的起始游标、被认领的消息、已清理的无效 ID(7.0 起)
版本Redis 6.2 起
配套命令XPENDING 观察积压,XACK 确认处理完成

典型使用场景

  • 消费者进程崩溃或重启后,把超时未确认的消息接过来继续处理
  • 定时任务扫描 pending 积压,做补偿消费
  • 扩容消费者后重新分配旧消费者遗留的消息
  • 用 JUSTID 只取消息 ID,避免既拉取值体又用不上
  • 配合 XPENDING 判断积压规模,决定每轮认领的批量

认领与观察

认领与观察
# 把空闲超过 60 秒的 pending 消息转交给当前消费者,一批最多 100 条
redis-cli XAUTOCLAIM orders g1 worker-b 60000 0 COUNT 100
# 只取消息 ID(不返回值体),适合先统计再按需读取
redis-cli XAUTOCLAIM orders g1 worker-b 60000 0 COUNT 100 JUSTID
# 认领前先看积压,认领后再看计数是否下降
redis-cli XPENDING orders g1
redis-cli XPENDING orders g1 - + 10

返回值读法

返回项含义注意点
游标下一次认领的起始 ID回到 0-0 表示这一轮已扫完
消息列表本次成功认领的消息加 JUSTID 时只有 ID,没有字段与值
清理的 ID 列表已从 pending 移除的无效消息Redis 7.0 起才会返回这一项
min-idle-time至少空闲多久才会被认领设太小容易抢走正在处理的消息
COUNT单次最多认领条数不设时默认值较小,通常需要显式指定
认领只是把消息归属改成新消费者,消息仍在 pending 列表里;处理完必须 XACK,否则下一轮还会被再次认领,形成反复处理。
COUNT 给得过大,会瞬间把大量消息灌给单个消费者,容易把它压垮;按消费者的实际吞吐设一个上限,用循环代替一次拉满。

易错点

  • 认领后忘记 XACK → pending 越滚越大,同一条消息被反复处理 → 处理成功立刻确认,失败要显式记录并设重试上限
  • COUNT 不设上限 → 单个消费者一次拉走海量消息,超时或内存暴涨 → 按吞吐设批量并循环处理
  • min-idle-time 设得太小 → 把仍在正常处理的消息抢走,导致重复消费 → 按业务最长处理时间给出空闲门槛
  • 忽略游标返回值 → 只处理了一批就以为恢复完成,剩余消息无人认领 → 循环调用直到游标回到 0-0

数据来源与参考

  • Redis 官方文档:XAUTOCLAIM 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌