Redis的Stream学习与使用

文章讲述了在使用RedisStream时,如何正确创建消费者组以消费已有消息,以及理解XGROUPCREATE命令的不同参数用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

提示:Stream可以创建消费者组:

在学习使用Stream模拟消息队列,在创建消费着组的时候出现了一些坑


问题描述

提示:这里Stream里的消息还从未被任何消费者读取过

已经创建了Stream并由两条消息,在创建Stream的消费者组后却不能消费,一直返回null
Redis客户端代码:

> 云服务Redis connected!
1、创建Stream,并添加两条消息
> XADD mystream * name Ikun sex woman
1701528023834-0
> XADD mystream * name Mike sex man
1701528031139-0

2、给mystream创建消费者组mygroup
> XGROUP CREATE mystream mygroup $ MKSTREAM
OK

3、给消费者组添加消费者consumer1、consumer2
> XGROUP CREATECONSUMER 'mystream' 'mygroup' consumer1
1
> XGROUP CREATECONSUMER 'mystream' 'mygroup' consumer2
1

注意到这里都一切正常,按理说我应该是可以消费这两条消息的,但是!!!
4、消费者consumer1从mygroup消费一条消息
> XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream >
null
我消费不到任何消息,可是我明明有两条消息啊,而且还未没读取过!!!

原因分析:

提示:我一度认为是消费的地方出了问题,但后来发现根本不是,而是消费者组的创建上:

XGROUP CREATE mystream mygroup $ MKSTREAM
这个命令是在网上copy的,问题就出在它上边,翻了官网才了解它的含义是如果未创建则创建Stream,但不会提取已经存在的数据加入消费者组


解决方案:

知道问题出在哪就好说了,完后我改了命令重试了一遍一切全正常了,下面是改后的命令

XGROUP CREATE mystream mygroup 0
附上它的含义如果Stream已经创建了则从头提取整个流把里边已经有的数据加入到消费者组,如果Stream未创建则报错

这里额外附上我当时怀疑消费出问题发现的一些知识点

XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream 0
含义:获取从未被读取的或已被我读取但未ACK的消息

XREADGROUP GROUP mygroup consumer1 COUNT 1 STREAMS mystream >
含义:获取从未被读取过的消息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值