【Redis 开发】Redis消息队列

消息队列

博主前面讲过各个消息队列的基础入门,那么处于成本考虑,Redis中也提供了三种不同的方式来实现消息队列:

  1. List结构:基于list结构模型模拟消息队列
  2. PubSub:基本的点对点消息模型
  3. Stream:比较完善的消息队列模型

基于list结构模型模拟消息队列

Redis的list模型是一个双向链表,很容易模拟出队列效果
我们可以通过LPUSH结合RPOP,或者RPUSH结合LPOP来实现
但是队列中没有消息的话会返回null,并不像JVM的阻塞队列那样会阻塞并等待消息
因此这里应该使用BRPOP或者BLPOP来实现阻塞效果

优点:

  1. 利用Redis存储,不限于JVM内存上限
  2. 基于Redis的持久化机制,数据安全性有保证
  3. 可以满足消息有序性

缺点:

  1. 无法避免消息丢失
  2. 只支持单消费者(同一条消息无法被多个消费者消费)

基于PubSub的消息队列

PubSub(发布订阅),消费者可以订阅一个或多个channel,生产者向对应channel发送消息后,所有的订阅者都能够收到相关信息
SUBSCRIBE channel [channel]:订阅一个或多个频道
PUBLISH channel msg:向一个频道发送消息
PSUBSCRIBE pattern[pattern]:订阅与pattern格式匹配的所有频道

优点:

采用发布订阅模型,支持多生产,多消费

缺点:

  1. 不支持数据持久化
  2. 无法避免消息丢失
  3. 消息堆积有上限,超出时数据丢失

基于stream的消息队列

Stream是Redis 5.0 引入的一种新数据模型,可以实现一个功能非常完善的消息队列
XADD:发送消息的命令
在这里插入图片描述
XREAD:读取消息的命令
在这里插入图片描述
读取最新消息的命令:
XREAD COUNT 1 BLOCK 1000 STREAMS users $
在java代码中我们可以持续监听队列中最新的消息

while
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值