RedisPub/Sub
Pub/Subは、任意の数の_データパブリッシャー_からデータを収集し、パブリッシャーに直接接続することなく、1つ以上の_購読_者がリアルタイムでフィードを消費できるようにする手段である。 このパターンでは、システムをより簡単に拡張することができ、パブリッシャーや購読者をいつでも追加したり削除したりすることができる。
Redisでは、パブリッシャーとサブスクライバーのインターフェースとなるPub/Sub_チャンネル_を作成することができる。 チャネルのメッセージは、各サブスクライバに_一度_だけ送信されるので、重複してはならないトリガアクションに最適ですが、一度配信されたチャネルメッセージは永続化されないので注意が必要です。
使用例:
- リアルタイムメッセージ。
- エフェメラルなマルチユーザーチャット。
- ログストリーミング。
チャンネル登録
_購読者_は単に「SUBSCRIBE」を発行するだけである
> SUBSCRIBE mychannel
購読者が複数のチャンネルを購読する必要がある場合、これも可能です:
> SUBSCRIBE mychannel1 mychannel2 mychannel3
チャンネルを購読するということは、購読者が購読した_後_にそのチャンネルに発行されるすべてのメッセージを受信することを意味します。 古いメッセージは永続化されないので、サブスクライバーは、その都度メッセージを取得するために接続し、サブスクライブする必要がある。
チャンネルが存在しない場合、サブスクライバーにはエラーは表示されず、メッセージも表示されない。
チャンネルへの公開
パブリッシャーは 'PUBLISH <channel> <message>
コマンドでチャンネルにパブリッシュできます:
> PUBLISH mychannel "my first message"
購読者は次のようなメッセージを受け取る:
1) "message"
2) "mychannel"
3) "my first message"
サブスクリプション・メッセージはチャンネル名とメッセージそのものを含む。
よくあるパターンは、メッセージ・テキストとしてJSONオブジェクトを送ることだ:
> PUBLISH mychannel '{"id":"1234","name":"db14","msg":"Out of Memory"}'
PUBLISH
の返り値は整数で、メッセージを受信した購読者の数を示す。
選択的購読
全チャンネルを購読する代わりに、ワイルドカード・チャンネルを購読することができる。 チャネルの適切な命名により、例えば、アプリケーションのすべてのログ、プロダクションのログだけ、あるいは、プロダクションデータベースのログだけを見るのに役立ちます。
> PSUBSCRIBE *
> PSUBSCRIBE prod_*
> PSUBSCRIBE prod_database_*
> PSUBSCRIBE prod_database_db57_activity_*
配信停止
購読者は、購読しているすべてのチャンネルの購読を解除することができる:
> UNSUBSCRIBE