Redis7 10大数据类型(Redis流)
  eHipUjOuzYYH 2023年11月02日 38 0

一、是什么

1、redis5.0之前痛点

redis消息队列的两种方案
1、list实现消息队列
list实现方式其实就是点对点的模式

Redis7 10大数据类型(Redis流)_消息队列

2、Pub/Sub

Redis7 10大数据类型(Redis流)_消息队列_02

2、Redis5.0版本新增数据结构Stream

Redis版的MQ消息中间件+阻塞队列

二、能干嘛

支持消息队列,它支持消息的持久化,支持自动生成全局唯一ID、支持ack确认消息的模式、支持消费组模式,让消息队列更加的稳定和可靠

三、底层结构和原理说明

Redis7 10大数据类型(Redis流)_自动生成_03

四、基本命令理论简介

1、队列相关指令

Redis7 10大数据类型(Redis流)_消息队列_04

2、消费组相关指令

Redis7 10大数据类型(Redis流)_消息队列_05

3、四个特殊符号

-+ 
最小和最大可能出现的id

$
$表示只消费新的消息,当前流中最大的id,可用于将要到来的信息

>
用于XREADGROUP命令,表示迄今还没有发送给组中使用者的信息,会更新消费者组的最后ID

*
用于XADD命令,让系统自动生成id

五、基本命令代码实操

1、队列相关指令

XADD

添加消息到队列末尾

Redis7 10大数据类型(Redis流)_redis_06

消息ID必须要比上个ID大
默认用星号表示自动生成规矩
* 用于XADD命令,让系统自动生成id

Redis7 10大数据类型(Redis流)_自动生成_07

XRANGE

用于获取消息列表(可以指定范围),忽略删除的消息
start表示开始值,-代表最小值
end表示结束值,+代表最大值
count表示最多获取多少个值

Redis7 10大数据类型(Redis流)_自动生成_08

XREVRANGE

与XRANGE的区别在于,获取消息列表元素的方向是相反的,end在前,start在后

Redis7 10大数据类型(Redis流)_自动生成_09

XDEL

Redis7 10大数据类型(Redis流)_消息队列_10

XLEN

用于获取Stream队列的消息的长度

Redis7 10大数据类型(Redis流)_redis_11

XTRIM

用于对Stream的长度进行截取,如超长会进行截取
MAXLEN允许的最大长度,对流进行修剪限制长度
MINID允许的最小id,从某个id值开始比该id值小的将会被抛弃

Redis7 10大数据类型(Redis流)_自动生成_12

Redis7 10大数据类型(Redis流)_自动生成_13

XREAD

用于获取消息(阻塞/非阻塞),只会返回大于指定ID的消息

Redis7 10大数据类型(Redis流)_自动生成_14

非阻塞

Redis7 10大数据类型(Redis流)_redis_15

阻塞

Redis7 10大数据类型(Redis流)_redis_16

类似java里面的阻塞队列

Redis7 10大数据类型(Redis流)_消息队列_17

2、消费组相关指令

XGROUP CREAT

用于创建消费者组

Redis7 10大数据类型(Redis流)_消息队列_18

XREADGROUP GROUP

> 表示从第一条尚未被消费的消息开始读取

消费组groupA内的消费者consumer1从mystream消息队列中读取所有消息

Redis7 10大数据类型(Redis流)_redis_19

但是,不同消费组的消费者可以消费同一条消息

Redis7 10大数据类型(Redis流)_自动生成_20

消费组的目的

Redis7 10大数据类型(Redis流)_自动生成_21

重点问题

Redis7 10大数据类型(Redis流)_redis_22

XPENDING

查询每个消费组内所有消费者[已读取、但尚未确认]的消息

Redis7 10大数据类型(Redis流)_消息队列_23

查看某个消费者具体读取了哪些数据

Redis7 10大数据类型(Redis流)_自动生成_24

XACK

向消息队列确认消息处理已完成

Redis7 10大数据类型(Redis流)_redis_25

3、XINFO用于打印Stream\Consumer\Group的详细信息

Redis7 10大数据类型(Redis流)_redis_26

六、使用建议

Stream还是不能100%等价于kafka、RabbitMQ来使用的,生产案例少,慎用
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  eHipUjOuzYYH   2023年11月19日   18   0   0 重启redis
  eHipUjOuzYYH   2023年12月07日   27   0   0 数据乐观锁redis
  P3nxyT0LRuwj   2023年11月24日   63   0   0 缓存redis配置文件
  L83A5jZvvg3Q   2023年11月19日   34   0   0 源码包icoredis
  eHipUjOuzYYH   2023年11月13日   190   0   0 本地地址redis链路
  9JCEeX0Eg8g4   2023年11月22日   23   0   0 数据redis持久化
  D04qQxYJZ4A6   2023年11月19日   37   0   0 mysqlredisphp