Redis深入理解之发布与订阅
Table of Contents
一、Redis 发布订阅简介
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
Redis 的 SUBSCRIBE 命令可以让客户端订阅任意数量的频道, 每当有新信息发送到被订阅的频道时, 信息就会被发送给所有订阅指定频道的客户端。
作为例子, 下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
除了订阅频道之外,客户端还可以通过执行 PSUBSCRIBE 命令订阅一个或多个模式,从而成为这些模式的订阅者:每当有其他客户端向某个频道发送消息时,消息不仅会被发送给这个频道的所有订阅者,他还会被发送给所有与这个频道相匹配的模式的订阅者。
二、频道的订阅与退订
数据结构存储:在 redisServer 中的字段 pubsub_channels 存储着所有频道的订阅关系,字典的键为某个被订阅的频道、值是一个链表,里面记录了所有订阅这个频道的客户端。
三、模式的订阅与退订
服务器也将所有模式的订阅关系都保存在服务器状态的 pubsub_patterns 属性里面:
存储案例如下:
- 客户端 client-7 正在订阅模式 “music.*"。
- 客户端 client-8 正在订阅模式 “book.*"。
- 客户端 client-9 正在订阅模式 “news.*"。
四、发送消息
当一个 Redis 客户端执行PUBLISH <channel> <message>
命令将消息 message 发送给频道 channel 的时候,服务器需要执行以下两个动作:
- 将消息 message 发送给 channel 频道的所有订阅者。
- 如果有一个或多个模式 pattern 与频道 channel 相匹配,那么将消息 message 发送给 pattern 模式的订阅者。
Read other posts