Redisは単なるデータベースではなく、パブリッシュとサブスクライブ(pub/sub)操作の両方をサポートするメッセージブローカーとしても機能します。このブログでは、 Navicat for Redis を使用したRedisのPub/Sub機能の概要を説明します。
パブリッシュ/サブスクライブメッセージングパラダイムについて
Pub/Subは、送信者(ブロードキャスター)が特定の受信者(サブスクライバー)にメッセージを送信できないパターンです。代わりに、パブリッシュされたメッセージは、何人のサブスクライバー(いる場合)が受診しているのかを知ることなく、チャネル経由で送信されます。それから、サブスクライバーは興味のあるメッセージのみを受信するために1つ以上のチャネルにサインアップします。この方法でパブリッシャーとサブスクライバーを分離すると、拡張性が向上し、複雑なシステム内の情報の流れの管理が容易になります。
RedisのPub/Subは、リアルタイム通知、マイクロサービス間のメッセージ送信、単一アプリケーションの異なる部分間の通信など、様々な目的に使用できる軽量、高速、スケーラブルなメッセージングソリューションを提供します。
Redisでのメッセージ配信
Redisは、最大1回のメッセージ配信システムを採用しています。名前が示すように、メッセージが配信されるとしても1回だけ配信されることを意味します。そのため、メッセージがRedisサーバーによって送信されると、再度送信されることはありません。サブスクライバーがメッセージを受信できない場合(例えば、エラーやネットワークの停止により)、メッセージは永久に失われます。ラジオでお気に入りの番組を聴くのと同じように、見逃してしまったら、運が悪いです。アプリケーションでより強力な配信保証が必要な場合は、代わりにRedisストリームを使用する必要があります。
また、Pub/Subはキー空間とは関係ありません。これは、データベース 10でパブリッシュされたメッセージがデータベース 1のサブスクライバーに聞かれることを意味します。スコープが必要な場合、Redisはチャネル名に接頭辞を付けること(つまり、prod_mychannel、test_mychannel)を提案します。
Navicat for Redisを使用したパブリッシュ
Navicat for Redis(またはNavicat Premium)では、メインツールバーのPub/SubボタンからPub/Sub画面にアクセスできます。そこから、パブリッシュペインを使用してメッセージをパブリッシュできます。
Redisでは、チャネルはユーザーによって明示的に作成されません。チャネルは、最初のメッセージが公開されるか、クライアントがチャネルをサブスクライブする時に自動的に作成されます。デモのために、同じRedisサーバーとの2つの接続を開きます。各接続は異なるクライアントとして機能します。最初の接続は"test_channel"をサブスクライブし、2番目の接続は同じチャネルにメッセージをパブリッシュします。そうすることで、メッセージが公開されるとすぐにサブスクライバーに配信されることが期待されます。
Navicatでチャネルをサブスクライブするためには、サブスクライブボタンをクリックするだけです。これにより、サブスクライブダイアログが開きます:
ここで、チャネル名 "test_channel"を入力し、サブスクライブをクリックします。ダイアログが閉じると、チャネルはサブスクライブアクションの記録とともにチャネルリストに表示されます:
Navicatでメッセージをパブリッシュするためには、チャネルリストでメッセージを選択し(この時点ではチャネルが1つしかないため、これがデフォルトです)、メッセージテキストフィールドにメッセージを入力して、パブリッシュをクリックします。この時点で、メッセージが受信されたという通知が表示されるはずです:
結論
このブログでは、Navicat for Redisを使用してRedisのPub/Sub機能を調査しました。
Navicat for Redisを試してみたい場合は、こちら からダウンロードしてください。トライアル版では14日間全ての機能を使用できます。