はじめに:Redisのはまた、いくつかの時間がかかりましたが、使用のパブリッシュおよびサブスクライブ頻度は高くないが、アイドル時間を利用して、下のRedisは公開の底に取得したモデルをサブスクライブ。
まず、チャンネルに加入し、情報発信
機能:RedisのSUBSCRIBEコマンドは、新しいメッセージが加入したチャネル情報に送信されるたびに、クライアントは、任意の数のチャネルに加入することを可能にするには、指定されたチャンネルに加入しているすべてのクライアントに送信されます。一例の図を購読する:以下の図は、チャネルチャネル1を示しており、3つのクライアントがこのチャネルにサブスクライブ- CLIENT2、client5とクライアント1との間の関係:
例の公開図:新しいメッセージがコマンドを発行するチャンネル1でチャネルに送信されたときに、このメッセージは、その3つのクライアントの加入者に送信されます。
第二に、構造的な原理を解決するためにサブスクライブ
説明:各Redisのサーバー・プロセスは、構造が辞書のキーがサブスクライブしているサブスクリプション・チャネルのための情報を救う辞書で、表現がプロパティredis.hサーバのステータス/ redisServer構造を維持しpubsub_channelsチャネル、および辞書の値は、すべてがこのチャンネルにサブスクライブし、クライアントに保存されているリンクリストです。
概略的な例:この図は次を示し pubsub_channels
例を client2
、 client5
と client1
に加入し channel1
て、他のチャネルは、他のクライアント加入しています。
操作:当客户端调用 SUBSCRIBE 命令时, 程序就将客户端和要订阅的频道在 pubsub_channels 字典中关联起来。
示意图:如果客户端 client10086 执行命令 SUBSCRIBE channel1 channel2 channel3 ,那么前面展示的 pubsub_channels 将变成下面这个样子,通过遍历所有输入频道。
结论:通过 pubsub_channels 字典, 程序只要检查某个频道是否为字典的键, 就可以知道该频道是否正在被客户端订阅; 只要取出某个键的值, 就可以得到所有订阅该频道的客户端的信息。
三、发布信息到频道结构解析
原理说明:当调用 PUBLISH channel message 命令, 程序首先根据 channel 定位到字典的键, 然后将信息发送给字典值链表中的所有客户端。
例子示意图:对于以下这个 pubsub_channels 实例, 如果某个客户端执行命令 PUBLISH channel1 "hello moto" ,那么 client2 、 client5 和 client1 三个客户端都将接收到 "hello moto" 信息,通过遍历订阅频道的所有客户端。
四、退订频道
原理:使用 UNSUBSCRIBE 命令可以退订指定的频道, 这个命令执行的是订阅的反操作: 它从 pubsub_channels 字典的给定频道(键)中, 删除关于当前客户端的信息, 这样被退订频道的信息就不会再发送给这个客户端。
以上就是本篇文章的全部了,其中redis还有一种基于模式的订阅与信息发送。带后续补上。
参考链接:https://redisbook.readthedocs.io/en/latest/feature/pubsub.html