*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+) |
*返回值
各子命令返回值不同:
- CREATE:
OK表示创建成功 - CREATECONSUMER:
1表示创建成功,0表示消费者已存在 - DELCONSUMER:Integer,表示删除前该消费者的待处理消息数量
- DESTROY:
1表示删除成功,0表示组不存在 - SETID:
OK表示设置成功 - 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 本身的数据。