Redis 最常见的业务场景就是缓存读取与存储,而随着时间的推移,有人开始将它作为消息队列来使用了,并且随着 Redis 版本的发展,在 Redis.2.0.0 中新增了发布订阅模式(Pub/Sub)代表着官方开始正式支持消息队列的功能了,直到今天为止还有部分公司在实现轻量级的消息队列时,依然会选择使用 Redis 来实现。并且消息队列的知识点也会作为一个进阶型的面试题经常出现在面试当中。
我们本文的面试题是,什么是消息队列?为什么要用消息队列?Redis 实现消息队列的方式有几种?如何保证 Redis 消息队列中的数据不丢失?
典型回答
消息队列(Message Queue)是一种进程间通信或同一进程的不同线程间的通信方式,它的实现流程是一方会将消息存储在队列中,而另一方则从队列中读取相应的消息,消息队列提供了异步的通信协议,也就是说消息的发送者和接收者无需同时与消息队列进行交互。
消息队列中有几个重要的概念:
- 生产者:是指发布消息的一方;
- 消费者:接收消息的一方,也叫订阅者或订阅方;
- 通道(channel):也叫频道,它可以理解为某个消息队列的名称,首先消费者先要订阅某个 channel,然后当生产者把消息发送到这个 channel 中时,消费者就可以正常接收到消息了。
它们的执行流程如下图所示: 使用消息队列有如下好处:
- 削峰填谷:将某一个时刻急