侧边栏壁纸
博主头像
此昵称不存在 博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Redis消息队列

Administrator
2022-10-30 / 0 评论 / 0 点赞 / 96 阅读 / 0 字 / 正在检测是否收录...

基于List结构模拟消息队列

队列是入口和出口不在一起的,因此我们可以利用Redis的List结构模拟消息队列。利用LPUSH(从左侧添加元素)结合RPOP(从右侧取出元素)、RPUSH(从右侧添加元素)结合LPOP(从左侧取出元素)来实现。不过,该方式存在一个问题,当队列中没有消息时LPOP或者RPOP会返回null,并不能像阻塞队列那样会阻塞并等待消息。因此此处可使用BRPOP或者BLPOP来实现阻塞效果
image-1667115025801

优点

  • 利用Redis存储,不受JVM内存上线
  • 基于Redis的持久化机制,数据安全问题有保证
  • 可以满足消息的有序性

缺点

  • 无法避免消息丢失(消息POP后未被处理,则该消息会丢失掉)
  • 只支持单消费者(消息POP后便从list中移除,无法为其他消费者提供服务)

基于PubSub(发布订阅)结构模拟消息队列

PubSub(发布订阅)是Redis2.0版本引入的消息传递模型。消费者可以订阅一个或者多个channel(信道)充当交换机,生产者向对应的channel中发送消息后,所有订阅者都可以收到相关的消息(类似于RabbitMQ中的Fanout模式)

  • subscribe channel [channel]:订阅一个或者多个信道
  • publish channel msg: 向一个信道中发送消息
  • psubscribe pattern[pattern]: 订阅与pattern格式匹配的所有信道
    image-1667116346409

优点

  • 采用发布订阅模式,支持多个生产、消费

缺点

  • 不支持数据持久化
  • 无法避免消息丢失(消息发送成功后若无消费者接收则直接丢失了)
  • 消息堆积有上线,超出时数据丢失

基于PubSub(发布订阅)结构模拟消息队列

Stream是Redis5.0引入的一种新的数据类型,可以实现一个功能丰富完善的消息队列
image-1667129239024
image-1667129260233

Stream类型消息队列的XREAD命令的特点

  • 消息可回溯
  • 一个消息可以被多个消费者读取
  • 可以阻塞读取
  • 有消息漏读的风险
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区