Redis的发布与订阅功能可以让客户端通过广播方式,将消息(message)同时发送给可能存在的多个客户端,并且发送消息的客户端不需要知道接收消息的客户端的具体信息。换句话说,发布消息的客户端与接收消息的客户端两者之间没有直接联系。
用户可以通过执行PUBLISH命令,将一条消息发送至给定频道:
PUBLISH channel message
用户可以通过执行SUBSCRIBE命令,让客户端订阅给定的一个或多个频道:
SUBSCRIBE channel [channel channel ...]
接收频道消息
与订阅消息一样,频道消息也是由3个元素组成的:
●消息的第1个元素为"message",用于表明该消息是一条频道消息而非订阅消息。
●消息的第2个元素为消息的来源频道,用于表明消息来自于哪个频道。
●消息的第3个元素为消息的正文,也就是消息的真正内容。
用户在使用SUBSCRIBE命令订阅一个或多个频道之后,如果不想再收到某个频道的消息,那么可以使用UNSUBSCRIBE命令退订指定的频道:
UNSUBSCRIBE [channel channel ...]
用户可以通过执行PSUBSCRIBE命令,让客户端订阅给定的一个或多个模式:
PSUBSCRIBE pattern [pattern pattern ...]
传入PSUBSCRIBE命令的每个pattern参数都可以是一个全局风格的匹配符,比如"news.*"模式可以匹配所有以"news."为前缀的频道,而"news.[ie]t"模式则可以匹配"news.it"频道和"news.et"频道,诸如此类。
模式消息与之前展示的订阅消息以及频道消息稍微有些不同,它由4个元素组成:
●消息的第1个元素为"pmessage",它表示这是一条模式消息而不是订阅消息或者频道消息。
●消息的第2个元素为被匹配的模式,而第3个元素则是与模式相匹配的频道。
●消息的第4个元素为消息的正文,也就是消息的真正内容。
与退订频道的UNSUBSCRIBE命令类似,Redis也提供了用于退订模式的PUNSUBSCRIBE命令:
PUNSUBSCRIBE [pattern pattern pattern ...]
用户可以通过执行PUBSUB CHANNELS命令来列出目前被订阅的所有频道,如果给定了可选的pattern参数,那么命令只会列出与给定模式相匹配的频道:
PUBSUB CHANNELS [pattern]
用户可以通过执行PUBSUB NUMSUB命令,查看任意多个给定频道的订阅者数量:
PUBSUB NUMSUB [channel channel ...]
通过执行PUBSUB NUMPAT命令,用户可以看到目前被订阅模式的总数量:
PUBSUB NUMPAT