redis学习十二:数据类型命令及落地运用 (Stream)

redis流(Stream):就是redis版本的MQ,消息中间件

作用:实现消息队列,它支持消息的持久化,支持自动生成全局唯一id,支持ack确认消息的模式,支持消费组模式等,让消息队列更加的稳定和可靠。

1.xadd key */id field value 添加消息到队列末尾,id必须比上个id大,使用*号默认生成id

xrange key 获取消息列表,忽略删除的消息:start表示开始值,-代表最小值;end表示结束值,+代表最大值;count表示最多获取多少个值

 2.xrevrange 逆序显示

xdel key id删除对应id的消息

xlen key 显示这个key一共有多少个id

 3.xtrim 截取

maxlen允许的最大长度,对流进行修剪限制长度

minid允许的最小id,比其小的会被删掉

 4.xread读取消息(阻塞/非阻塞),只会返回大于指定ID的信息

(1)非阻塞:$代表特殊id表示以当前stream已经存储的最大id作为最后一个id,当前stream中不存在大于当前最大id的消息,所以这个时候返回nil

0-0代表从最小的id读取stream消息,不指定count的话胡返回所有消息,也可以使用0/00/000

(2)阻塞:block,block 后面为0默认永远阻塞,表示是否以阻塞方式读取消息,默认不阻塞,比如查询$那个,需要另一个号去添加一个新的才有

如图,一开始是没有的,我新加了一个进去后才能读到。

 5.xgroup create key 

$表示从stream尾部开始消费

0表示从stream头部开始消费

创建消费者组时候必须指定id,id为0表示从头开始消费,为$表示只消费新的消息,队尾新来的

 6.分组读消息xreadgroup group 

stream中消息一但被消费组里的一个消费者读取了,就不能再被该消费组内的其他消费者读取了,

即同一个消息组里的消费者不能消费同一条消息,刚才的xreadgroup命令再执行一次读到的就是空,

即使是同一个人也是空(游标已经从头刷到尾了)

另一个组里不为空。

消费组的目的:让组内的多个消费者共同分担读取消息,所有通常会让每个消费者读取部分信息(在消费者后面加count),

从而实现消息读取负载在多个消费者间是均衡分布的

 7.xpending key group查看消息组读取情况

上面是所有消费者读取消息的最小和最大ID

下面是每个消费者对应读了几条(读过,未确认)

 8.xack进行确认签收消息

 9.xinfo,打印stream\consumer\group信息

 

 

posted @   浮笙芸芸  阅读(445)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示