一、是什么
1、redis5.0之前痛点
redis消息队列的两种方案
1、list实现消息队列
list实现方式其实就是点对点的模式
2、Pub/Sub
2、Redis5.0版本新增数据结构Stream
Redis版的MQ消息中间件+阻塞队列
二、能干嘛
支持消息队列,它支持消息的持久化,支持自动生成全局唯一ID、支持ack确认消息的模式、支持消费组模式,让消息队列更加的稳定和可靠
三、底层结构和原理说明
四、基本命令理论简介
1、队列相关指令
2、消费组相关指令
3、四个特殊符号
-+
最小和最大可能出现的id
$
$表示只消费新的消息,当前流中最大的id,可用于将要到来的信息
>
用于XREADGROUP命令,表示迄今还没有发送给组中使用者的信息,会更新消费者组的最后ID
*
用于XADD命令,让系统自动生成id
五、基本命令代码实操
1、队列相关指令
XADD
添加消息到队列末尾
消息ID必须要比上个ID大
默认用星号表示自动生成规矩
* 用于XADD命令,让系统自动生成id
XRANGE
用于获取消息列表(可以指定范围),忽略删除的消息
start表示开始值,-代表最小值
end表示结束值,+代表最大值
count表示最多获取多少个值
XREVRANGE
与XRANGE的区别在于,获取消息列表元素的方向是相反的,end在前,start在后
XDEL
XLEN
用于获取Stream队列的消息的长度
XTRIM
用于对Stream的长度进行截取,如超长会进行截取
MAXLEN允许的最大长度,对流进行修剪限制长度
MINID允许的最小id,从某个id值开始比该id值小的将会被抛弃
XREAD
用于获取消息(阻塞/非阻塞),只会返回大于指定ID的消息
非阻塞
阻塞
类似java里面的阻塞队列
2、消费组相关指令
XGROUP CREAT
用于创建消费者组
XREADGROUP GROUP
> 表示从第一条尚未被消费的消息开始读取
消费组groupA内的消费者consumer1从mystream消息队列中读取所有消息
但是,不同消费组的消费者可以消费同一条消息
消费组的目的
重点问题
XPENDING
查询每个消费组内所有消费者[已读取、但尚未确认]的消息
查看某个消费者具体读取了哪些数据
XACK
向消息队列确认消息处理已完成
3、XINFO用于打印Stream\Consumer\Group的详细信息
六、使用建议
Stream还是不能100%等价于kafka、RabbitMQ来使用的,生产案例少,慎用