Redis实现 发布/订阅 消息对列
前言
发布订阅是一种典型的异步通信模型,可以让消息的发布者和订阅者充分解耦
一、什么是发布/订阅
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。
我们可以拿快递方面举例,
发布者 : 就是快递小哥,他把快递给你放到驿站
订阅者 : 放到驿站后,你就会收到消息,你的快递已经放到驿站,你就去驿站拿就OK了
这里的发布者和订阅者的关系不大,快递小哥只负责把快递放到驿站,而你去取,两者没有直接接触
这样他们的耦合度就大大降低了**
二、Redis实测
1.我们开启两个redis客户端
截图实例 :
我在这里开启两个redis客户端
2.订阅频道
代码如下(示例):
subscribe 频道名
2.发布消息 message
代码如下(示例):
publish 频道名 "内容"
我们在发布消息的时候,订阅方就会立马收到,如何发送的频道没有客户端订阅,则返回0
总结
虽然redis实现了发布订阅(publish/subscribe)的功能,但是在通常的情况下是不推荐使用的,如果想使用消息队列这种功能,最好还是使用专业的各种MQ中间件,例如rabbitMQ,rockedMQ,activitedMQ等
概要说一下就是,publish和subscribe 的缺陷在于客户端必须一直在线才能接收到消息,断线可能会导致客户端丢失消息,除此之外,旧版的redis可能会由于订阅者消费不够快而变的不稳定导致崩溃,甚至被管理员杀掉
原因1 : 客户端订阅了频道,但自己读取消息的速度却不够快的话,那么不断积压的消息会使redis输出缓冲区的体积变得越来越大,这可能使得redis本身的速度变慢,甚至直接崩溃。
原因2: 这和数据传输可靠性有关,如果在订阅方断线,那么他将会丢失所有在短线期间发布者发布的消息,这个让绝不多数人都很失望吧。