










XADD命令将消息发布到流中,然后使用XREAD命令从流中获取消息。
生产者使用XADD将任务发布到流中,而消费者使用XREAD来获取并处理任务。
消费者可以使用消费组(Consumer Group)来协作地消费消息,确保消息只被一个消费者处理。
Redis的流数据结构是持久性的,事件不会在写入后立即删除。你可以配置流的最大长度,以控制存储事件的数量,超出最大长度后的事件将被删除。
流的数据可以在Redis重启后仍然保持。
XADD mqstream * repo 5
这句命令意思是往名称为mqstream的消息队列中插入一条消息,消息的键是repo,值是5,其中,消息队列名称后面的*,表示让redis为插入的数据自动生成一个全局唯一的ID
XREAD BLOCK 100 STREAMS mqstream 1599203861727-0
当消费者需要读取消息时,可以直接使用XREAD命令从消息队列中读取。XREAD在读取消息时,可以指定一个消息ID,并从这个消息ID的下一条消息开始进行读取。另外在调用XREAD是设定block配置项实现类似于BRPOP的阻塞读取操作。当消息队列中没有消息时,一旦设置了block配置项,XREAD就会阻塞,阻塞时长可以在block配置项进行设置
XREAD block 10000 streams mqstream $
命令最后的$符号表示读取最新的消息,同时,我们设置了block 10000的配置项,10000的单位是毫秒,表明XREAD在读取最新消息时,如果没有消息到来,XREAD将阻塞10000毫秒,然后再返回。
XGROUP create mqstream group1 0
XREADGROUP group group1 consumer1 streams mqstream >
命令最后的参数">"表示从第一条尚未被消费的消息开始读取。因为在consumer1读取消息前,group1中没有其他消费者读取过消息,所以,consumer1就得到mqstream消息队列中的所有消息了。
其中如果消息队列中的消息,被消费者组里的消费者读取了,就不能再被该消费组内的其他消费者读取了。之所以我们使用消费者组,是为了多个消费者共同分担读取消息,让group2中的consumer1、2、3各自读取一条消息。
XPENDING mqstream group2
查看某一个消费者具体读取了哪些数据
XPENDING mqstream group2 - + 10 consumer2
XACK mqstream group2 1599274912765-0
XPENDING命令可以用来查询每个消费组内所有消费者已读取但尚未确认的消息,而XACK命令用于向消息队列确认消息处理已完成。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。