Redis的发布与订阅功能有PUBLISH、SUBSCRIBE、PSUBSCRIBE等命令组成。
频道的订阅与退订
每当客户端执行SUBSCRIBE命令订阅某个或者某些频道的时,服务器会将客户端与被订阅的频道在pubsub_channels字典中进行关联。退订则是通过UNSUBSCRIBE命令来实现相反的功能。
模式的订阅与退订
与订阅频道类似,客户端执行PSUBSCRIBE命令订阅模式,服务器通过pubsub_patterns实行来记录客户端与被订阅模式的关系。
退订模式择时通过PUNSUBSCRIBE命令来实现相反的功能。
发送消息
当Redis客户端执行PUBLISH <channel> <message>命令将消息message发送给频道channel的时候,服务器会执行如下2个操作:
- 将消息message发送给channel频道的所有订阅者(查看pubsub_channel字典找到对应的频道,发送给订阅该频道的所有客户端)
- 如果有一个或多个模式pattern与频道channel相匹配,那么将message发送给pattern模式的订阅者(遍历pubsub_patterns链表,查看该链表中的所有节点是否匹配相应的模式)
查看订阅消息
客户端可以通过PUBSUB命令查看频道或者模式的相关信息,比如某个频道目前有多少个订阅者,又或者某个模式目前有多少订阅者等等,都是通过读取pubsub_channels字典和pubsub_patterns链表中的信息来实现的。
image.png
网友评论