Redis 发布订阅 (pub/sub)

一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。

Redis 客户端可以订阅任意数量的频道。当给这个频道发布消息后,消息就会发送给订阅的客户端
image.png

实现

  1. //订阅channel1
  2. SUBSCRIBE channel1
  3. //给channel1发布消息hello
  4. publish channel1 hello

image.png
image.png

不推荐使用Redis来作发布订阅

分析

消息队列通常适用于多个不同的系统进行信息通信,如果把上面的消费者和生产者分别写在不同的项目中,就会发现,如果你的消费者突然意外挂掉了,由于使用Redis作为消息队列这种方案是无法将数据进行持久化的,所以不可避免的会导致消息的丢失。这种方案的的缺陷就在于客户端必须一直在线才能接收到消息。

不推荐Redis作为消息队列的原因有以下两点:

  • 系统稳定性:在旧版的Redis中,如果一个客户端订阅了某个或者某些频道,但是它读取消息的速度不够快,那么不断的积压的消息就会使得Redis输出缓冲区的体积越来越大,这可能会导致Redis的速度变慢,甚至直接崩溃。也可能会导致Redis被操作系统强制杀死,甚至导致操作系统本身不可用。
  • 数据可靠性:任何网络系统在执行操作时都可能会遇到断网的情况。而断线产生的连接错误通常会使得网络连接两端中的一端进行重新连接。如果客户端在执行订阅操作的过程中断线,那么客户端将会丢失在断线期间的消息,这在很多业务场景下是不可忍受的。