什么是发布订阅?
发布和订阅是进程间的一种消息通信模式:发送者(publisher)将消息发送给一个第三方,订阅者(subscriber)从第三方那里接收消息。
这个第三方我们通常称之为 消息中间件,消息中间件主要是用来做系统之间的异步通信,常见的消息中间件有:ActiveMQ,RocketMQ,RabbitMQ,Kafka 等。
Redis 一般不用来做消息中间件,只用它做缓存,但是它仍然提供了这个功能。
发布和订阅应用场景?
场景:我们订阅了头条上的某个栏目的新闻,当这个栏目有新的新闻的时候,头条(服务端)会主动推送给我们,而我们(客户端)无需主动请求。
发布和订阅的优点?
由于我们所需的消息并不是从服务器直接请求得来,而是从消息中间件获得,因此缓解了服务端在高并发量情况下的压力。
就好比你是手机生产厂商,你不直接卖手机,而是把手机先交给代理商,代理商替你卖,你就轻松了。
发布和订阅的缺点?
-
如果消费者不在线,消息可能接受不到(当然我们可以通过持久化存储的方式来解决)。
-
实时性相对于服务器-客户端这种一对一的通信方式来说低一些。
Redis 是如何实现发布和订阅的?
涉及到的命令:
subscribe c1 c2 c3 ...
:订阅 c1,c2,c3,…等频道。psubscribe new*
:订阅前缀为new
的频道。publish channel message
:向 channel 频道发送 message 消息。
输入完 subscribe c1 c2 c3
之后,客户端就进入等待状态,等待订阅的频道向自己发送消息
通过通配符来订阅多个频道