*Redis XGROUP 命令

XGROUP 是消费者组相关命令的容器命令,用于创建、管理、删除消费者组及消费者。


*语法

XGROUP 包含以下子命令:

XGROUP CREATE key groupname id|$ [MKSTREAM] [ENTRIESREAD entries-read]
XGROUP CREATECONSUMER key groupname consumername
XGROUP DELCONSUMER key groupname consumername
XGROUP DESTROY key groupname
XGROUP SETID key groupname id|$ [ENTRIESREAD entries-read]
XGROUP HELP

*参数说明

参数 类型 必填 说明
key String Stream 键名
groupname String 消费者组名称
consumername String 消费者名称
id String 组起始 ID(或 $ 表示最新)
MKSTREAM Flag 若 Stream 不存在则自动创建
ENTRIESREAD Integer 设置已读取条目数(Redis 7.0+)

*返回值

各子命令返回值不同:

  • CREATEOK 表示创建成功
  • CREATECONSUMER1 表示创建成功,0 表示消费者已存在
  • DELCONSUMER:Integer,表示删除前该消费者的待处理消息数量
  • DESTROY1 表示删除成功,0 表示组不存在
  • SETIDOK 表示设置成功
  • HELP:返回帮助文本数组

*时间复杂度

各子命令复杂度不同:

  • CREATE / CREATECONSUMER / DELCONSUMER / SETID / HELP:O(1) - DESTROY:O(N),N 为消费者组 PEL 中的消息数量

*示例

*创建消费者组

> XGROUP CREATE mystream mygroup $ MKSTREAM
OK

*创建消费者

> XGROUP CREATECONSUMER mystream mygroup consumer1
(integer) 1

*删除消费者

> XGROUP DELCONSUMER mystream mygroup consumer1
(integer) 0

*删除消费者组

> XGROUP DESTROY mystream mygroup
(integer) 1

*设置消费者组最后投递 ID

> XGROUP SETID mystream mygroup 0
OK

*常见错误

错误 原因 解决
BUSYGROUP Consumer Group name already exists 组名已存在 使用 DESTROY 删除后重建,或换组名
NOGROUP No such consumer group 组不存在 先 CREATE
ERR wrong number of arguments 参数不足 检查子命令和必传参数

*最佳实践

  • 创建消费者组时使用 $ 从最新消息开始,或 0 从历史第一条开始
  • 使用 MKSTREAM 避免先创建 Stream 再创建组的繁琐步骤
  • 删除消费者前确认其没有待处理消息(PEL 为空)
  • 合理规划消费者组名称,按业务或模块命名

*FAQ

Q1: 创建消费者组时 id 用 $0 有什么区别? A: $ 表示从组创建之后的新消息开始消费;0 表示从 Stream 第一条消息开始消费历史数据。

Q2: 一个 Stream 可以有多少个消费者组? A: 没有硬性限制,但建议按业务需求合理规划,避免过多组影响性能。

Q3: 删除消费者组后,Stream 数据还在吗? A: 是的,XGROUP DESTROY 只删除消费者组元数据,不影响 Stream 本身的数据。