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信息



浙公网安备 33010602011771号