文章目录
1. 概念
- 将一个流从逻辑上划分为多个不同的流,并让消费者组属下的消费者去处理组中的消息
2. 创建消费者组
XGROUP CREATE stream group id
: 在流stream中创建一个消费者组group, 该消费者组group只能获取流中指定id之后的元素(创建消费者组时应该保证流存在)
127.0.0.1:6379> XADD s1 * k1 v1
"1645946886436-0"
127.0.0.1:6379> XADD s1 * k2 v2
"1645946890084-0"
127.0.0.1:6379> XADD s1 * k3 v3
"1645946894132-0"
127.0.0.1:6379> XADD s1 * k4 v4
"1645946902211-0"
127.0.0.1:6379> XGROUP CREATE s1 g1 0-0 # g1消费者组中含有流s1中的所有元素
OK
127.0.0.1:6379> XGROUP CREATE s1 g2 $ # $ 表示只获取流中最新的元素 此时g2中没有元素 后面新添加的元素会进入g2
OK
127.0.0.1:6379> XINFO GROUPS s1
1) 1) "name"
2) "g1" # 消费者组g1
3) "consumers"
4) (integer) 0
5) "pending"
6) (integer) 0
7) "last-delivered-id"
8) "0-0" # 最后递送消息ID
2) 1) "name"
2) "g2" # 消费者组g2
3) "consumers"
4) (integer) 0
5) "pending"
6) (integer) 0
7) "last-delivered-id"
8) "1645946902211-0" # 最后递送消息ID
3. 修改消费者组的最后递送消息ID
XGROUP SETID stream group id
: 将流stream中的消费者组group的最后递送id修改为新的值
127.0.0.1:6379> XGROUP SETID s1 g1 1645946890084-0
OK
127.0.0.1:6379> XINFO GROUPS s1
1) 1) "name"
2) "g1"
3) "consumers"
4) (integer) 0
5) "pending"
6) (integer) 0
7) "last-delivered-id"
8) "1645946890084-0"
- 如果新ID大于旧ID,那么消费者可能会漏掉一些原本应该读取的消息
- 如果新ID小于旧ID,那么消费者可能会重新读取到一些之前已经被确认过的消息
4. 销毁消费者组
XGROUP DESTROY stream group
: 销毁流stream中的group消费者组
127.0.0.1:6379> XGROUP DESTROY s1 g1
(integer) 1
127.0.0.1:6379> XINFO GROUPS s1
1) 1