Redis Pub/Sub メッセージング

RedisBeginner
オンラインで実践に進む

はじめに

この実験では、Redis の Pub/Sub メッセージングシステムを探求します。チャンネルへの購読方法、メッセージの発行方法、購読解除方法を学びます。この実験では、SUBSCRIBEPUBLISHUNSUBSCRIBEPSUBSCRIBE コマンドを使用した基本的な操作をガイドします。

SUBSCRIBE でチャンネルに購読する

このステップでは、SUBSCRIBE コマンドを使用して Redis のチャンネルに購読する方法を学びます。チャンネルに購読することで、そのチャンネルに発行されたメッセージを受信できるようになります。これは Redis の Pub/Sub メッセージングシステムにおける基本的な概念です。

ターミナル 1: チャンネルに購読する

最初のターミナル(ここでは ターミナル 1 と呼びます)を開きます。LabEx 環境で提供されている Xfce ターミナルを使用できます。

redis-cli コマンドを使用して Redis サーバーに接続します。

redis-cli

Redis プロンプト 127.0.0.1:6379> が表示されるはずです。

SUBSCRIBE コマンドを使用して mychannel という名前のチャンネルに購読します。

SUBSCRIBE mychannel

出力は以下のようになります。

Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "mychannel"
3) (integer) 1

出力の内訳を見てみましょう。

  • "subscribe": チャンネルへの購読が成功したことを示します。
  • "mychannel": 購読したチャンネルの名前です。
  • (integer) 1: 現在購読しているチャンネルの数です。

重要: Redis プロンプトがアクティブでチャンネルに購読された状態のまま、ターミナル 1 を開いたままにしておいてください。このターミナルを閉じたり Ctrl+C を押したりしないでください。そうするとチャンネルから購読解除されてしまいます。次のステップでメッセージを発行するために、別のターミナルを使用します。

PUBLISH でメッセージを発行する

このステップでは、PUBLISH コマンドを使用して Redis のチャンネルにメッセージを発行する方法を学びます。メッセージの発行は Pub/Sub システムの中核的な機能であり、特定のチャンネルのすべての購読者にデータを送信することを可能にします。

ターミナル 2: メッセージを発行する

2 番目のターミナル(ここでは ターミナル 2 と呼びます)を開きます。Xfce ターミナルの新しいタブを開くことができます。

redis-cli コマンドを使用して Redis サーバーに接続します。

redis-cli

Redis プロンプト 127.0.0.1:6379> が表示されるはずです。

次に、PUBLISH コマンドを使用して mychannel チャンネルにメッセージを発行します。

PUBLISH mychannel "Hello, Redis!"

ターミナル 2 の出力は、メッセージを受信したクライアントの数になります。

(integer) 1

この場合、前のステップで ターミナル 1mychannel にアクティブな購読があるため、出力は (integer) 1 となります。

ターミナル 1 でメッセージを確認する

次に、ターミナル 1(ステップ 1 で mychannel に購読した場所)に戻ります。発行したばかりのメッセージがリアルタイムで表示されているはずです。

1) "message"
2) "mychannel"
3) "Hello, Redis!"

これは以下を示しています。

  • "message": 発行されたメッセージであることを示します。
  • "mychannel": メッセージが発行されたチャンネルです。
  • "Hello, Redis!": メッセージの実際のコンテンツです。

リアルタイムメッセージングをテストする

これでリアルタイムメッセージングを試すことができます。

  1. ターミナル 2 に戻り、さらにメッセージを発行します。
  2. ターミナル 1 に切り替えて、メッセージが即座に表示されるのを確認します。
  3. 異なるメッセージを発行して、ライブ通信を観察してみてください。

例 - ターミナル 2 で:

PUBLISH mychannel "This is message 2"
PUBLISH mychannel "Real-time messaging works!"

重要: ターミナル 1ターミナル 2 の両方で redis-cli セッションをアクティブなままにしておいてください。次のステップでも両方のターミナルを使用します。

UNSUBSCRIBE で購読解除する

このステップでは、Redis の UNSUBSCRIBE コマンドを使用してチャンネルの購読を解除する方法を学びます。購読解除は、特定のチャンネルの購読者リストからクライアントを削除し、そのチャンネルに発行された後続のメッセージを受信しないようにします。

ターミナル 1: 購読モードの終了

ターミナル 1 (現在 mychannel を購読している場所) に移動します。購読ステータスが「Reading messages... (press Ctrl-C to quit)」と表示されているはずです。

ターミナル 1 は購読モードになっているため、通常の Redis コマンドを直接実行することはできません。購読を解除するには、まず購読モードを終了する必要があります。

  1. Ctrl+C を押して購読モードを終了します。

  2. redis-cli セッションが終了し、ターミナルのプロンプトに戻るはずです。

  3. Redis に再接続します。

    redis-cli
  4. これで UNSUBSCRIBE コマンドを実行できます (切断するとすでに購読解除されているため、実際には不要ですが)。

    UNSUBSCRIBE mychannel

注意: Ctrl+C を押した時点で、実際にはすべての購読から切断されています。UNSUBSCRIBE コマンドはデモンストレーション目的で表示されていますが、実際には切断すると自動的にすべてのチャンネルから購読解除されます。

ターミナル 1 の出力は次のようになります。

1) "unsubscribe"
2) "mychannel"
3) (integer) 0

出力の内訳を見てみましょう。

  • "unsubscribe": チャンネルの購読を解除したことを示します。
  • "mychannel": 購読を解除したチャンネルの名前です。
  • (integer) 0: 現在購読しているチャンネルの数です。mychannel の購読を解除したため、現在は 0 です。

ターミナル 2: 購読解除後の発行テスト

次に ターミナル 2 に切り替えて、mychannel に別のメッセージを発行します。

PUBLISH mychannel "Is anyone still there?"

ターミナル 2 の出力は次のようになります。

(integer) 0

これは、ターミナル 1 でチャンネルの購読を解除したため、どのクライアントもメッセージを受信しなかったことを示しています。

メッセージが受信されていないことの確認

ターミナル 1 を確認してください。チャンネルの購読を解除したため、新しいメッセージは表示されていないはずです。

これにより、チャンネルの購読を解除すると、そのチャンネルに発行された後続のメッセージを受信できなくなることがわかります。一方、発行者は引き続きメッセージを送信できます (ただし、誰も受信しません)。

重要: 次のステップのために、両方のターミナルとその redis-cli セッションをアクティブなままにしておいてください。

PSUBSCRIBE でパターン購読する

このステップでは、Redis の PSUBSCRIBE コマンドを使用してパターンでチャンネルに購読する方法を学びます。PSUBSCRIBE を使用すると、指定されたパターンに一致する複数のチャンネルに購読できます。これは、個々のチャンネルに個別に購読することなく、関連するチャンネルのグループからのメッセージを受信したい場合に便利です。

ターミナル 1: パターン購読

前のステップで mychannel から購読解除したため、ターミナル 1 には通常の Redis プロンプトが表示されているはずです。

ターミナル 1 で、PSUBSCRIBE コマンドを使用して news.* パターンに一致するチャンネルに購読します。

PSUBSCRIBE news.*

出力は以下のようになります。

Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.*"
3) (integer) 1

出力の内訳を見てみましょう。

  • "psubscribe": パターンに正常に購読したことを示します。
  • "news.*": 購読したパターンです。.* は任意の文字に一致するワイルドカードです。
  • (integer) 1: 現在購読しているパターンの数です。

ターミナル 2: パターンに一致するチャンネルに発行する

ターミナル 2 に移動し、PUBLISH コマンドを使用して news.sports チャンネルにメッセージを発行します。

PUBLISH news.sports "Sports news update!"

ターミナル 2 の出力は、メッセージを受信した購読者の数になります。

(integer) 1

パターンマッチングを観察する

ターミナル 1(パターンに購読した場所)に戻ります。発行したばかりのメッセージが表示されているはずです。

1) "pmessage"
2) "news.*"
3) "news.sports"
4) "Sports news update!"

これは以下を示しています。

  • "pmessage": パターンマッチしたメッセージであることを示します。
  • "news.*": マッチしたパターンです。
  • "news.sports": メッセージが発行された実際のチャンネルです。
  • "Sports news update!": メッセージの内容です。

複数のチャンネルをテストする

ターミナル 2 で、パターンに一致するさまざまなチャンネルに発行してみてください。

PUBLISH news.technology "New AI breakthrough!"
PUBLISH news.weather "Sunny skies ahead!"
PUBLISH sports.basketball "This won't match the pattern"

ターミナル 1 で、news.* のチャンネルのみが受信され、sports.basketballnews.* パターンに一致しないため受信されないことを確認してください。

重要: 両方のターミナルとその redis-cli セッションをアクティブなままにしておいてください。パターン購読は、複数の関連チャンネルを同時にリッスンする方法を示しています。

まとめ

この実験では、Redis の Pub/Sub メッセージングの基本を学びました。SUBSCRIBE コマンドを使用したチャンネルへの購読、PUBLISH コマンドを使用したチャンネルへのメッセージ発行、UNSUBSCRIBE コマンドを使用したチャンネルからの購読解除、そして PSUBSCRIBE コマンドを使用したパターンによるチャンネルへの購読方法を学びました。これらのコマンドは、Redis を使用したリアルタイムメッセージングアプリケーションの構築に不可欠です。