yankj12 / blog

技术研究、管理实践、其他的一些文章
MIT License
1 stars 2 forks source link

Redis作为消息队列 #55

Open yankj12 opened 5 years ago

yankj12 commented 5 years ago

概述

查阅相关网页描述,redis可以作为轻量级消息队列来使用,如果业务要求比较高,建议使用专业的消息队列。 另,redis在4.2之后可能会有一个专门的消息队列模块加入。

redis消息队列的实现

Redis消息队列

生产者消费者模式

生产者生产消息放到队列里,多个消费者同时监听队列,谁先抢到消息谁就会从队列中取走消息;即对于每个消息只能被最多一个消费者拥有

发布者订阅者模式

发布者生产消息放到队列里,多个监听队列的消费者都会收到同一份消息;即正常情况下每个消费者收到的消息应该都是一样的

参考

Redis消息队列

使用Redis 实现消息队列

实现即时生产消费

网上所流传的方法是使用Redis中list的操作BLPOP或BRPOP,即列表的阻塞式(blocking)弹出。让我们来看看阻塞式弹出的使用方式:

BRPOP key [key ...] timeout
此命令的说明是:
1、当给定列表内没有任何元素可供弹出的时候,连接将被 BRPOP 命令阻塞,直到等待超时或发现可弹出元素为止。 
2、当给定多个key参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的尾部元素。
另外,BRPOP 除了弹出元素的位置和 BLPOP 不同之外,其他表现一致。

实现ack机制

维护两个队列: pending队列和doing表(hash表)

参考

使用Redis 实现消息队列 用redis来实现具有ack机制的消息队列 也可以参考这篇文章

参考资料

  1. Redis pub sub命令
  2. Redis blpop命令
  3. Redis brpop命令
  4. Redis brpoplpush命令

redis相关文章

Redis文章列表 有赞延迟队列设计 这篇文章是将消息队列的,没有使用redis Redis 和 I/O 多路复用 Redis集群实现原理探讨

PubSub相关文章

理解并实现PubSub模式 前端方面的一个应用 浅析分布式下的事件驱动机制 PubSub 模式 浅析 Spring 中的事件驱动机制