Redis发布、订阅模式(PUB-SUB)详解

Redis的发布订阅(Pub/Sub)机制是一种消息通信模式,用于消息的广播。它允许多个客户端订阅(Subscribe)特定的频道(Channel),并在消息发布者(Publisher)向频道发布消息时,所有订阅该频道的客户端都能接收到消息。
工作原理
-  通信方式: - Redis的发布-订阅模式基于消息的发布与订阅。消息由发布者发布到频道(Channel),而订阅者则可以订阅一个或多个频道,接收发布者发送到这些频道的消息。
 
-  频道(Channel): - 频道是消息的通道,发布者将消息发送到特定的频道,订阅该频道的订阅者会接收到这些消息。频道在Redis中是一个由字符串标识的名字。
 
-  发布消息: - 发布者通过向指定频道发送消息来发布消息。多个订阅者可以订阅同一个频道,发布者发送的消息将被所有订阅了该频道的订阅者接收。
 

 4. 订阅消息:
- 订阅者通过执行订阅命令来订阅一个或多个频道。一旦订阅成功并且频道有消息发布,订阅者将接收到这些消息。

- 取消订阅: - 订阅者可以随时取消对某个或所有频道的订阅,取消订阅后将不再接收该频道的消息。
 
使用方法

- 发布消息: - 使用Redis的 PUBLISH命令向指定的频道发布消息。
 其中,PUBLISH channel messagechannel是频道的名称,message是要发送的消息内容。
 
- 使用Redis的 

-  订阅频道: -  使用Redis的 SUBSCRIBE命令订阅一个或多个频道。SUBSCRIBE channel [channel ...]
-  Redis还支持模式订阅( Pattern Subscription),可以使用PSUBSCRIBE和PUNSUBSCRIBE命令订阅和取消订阅模式。
-  例如 PSUBSCRIBE news* 可以订阅所有以 news 开头的频道。 
-  订阅成功后,Redis客户端将进入订阅模式,等待接收频道发布的消息。 
-  返回值为当前订阅的频道数量。 
  
 
-  
-  取消订阅: - 使用Redis的 UNSUBSCRIBE命令取消对一个或多个频道的订阅。
 如果不指定频道名称,则取消所有频道的订阅。UNSUBSCRIBE [channel [channel ...]]
 
- 使用Redis的 

Tips:
- 消息丢失: - 如果订阅者在消息发布之前或之后才订阅或取消订阅某个频道,那么该订阅者可能会错过在它未订阅期间发布的消息。也就是说,只有在订阅者实时在线并且订阅了频道的情况下才能接收到消息。
 


- 无持久化: - Redis的Pub/Sub模式不会持久化消息,也就是说,消息在发布后立即被传递给当前在线的订阅者,之后不会保存。如果订阅者断开连接或Redis服务器重启,已发布但未接收的消息将会丢失。
 

 
- 无确认机制: - Pub/Sub模式中没有类似于消息队列中的确认机制,没有办法确保消息一定被所有订阅者成功处理。例如,如果某个订阅者在处理消息时崩溃,消息不会重新发送给该订阅者。
 

- 非事务性: - 消息的发布和接收是非事务性的。发布者发布消息后,不会等待订阅者的应答,即便订阅者在消息发布后立即掉线,发布者也不会知道。
 

由于这些无保证性,Redis的Pub/Sub模式主要适用于那些对消息可靠性要求不高的应用场景。