Redis は、キャッシュ、データベース、メッセージ キュー、その他のシナリオで一般的に使用される、高性能のキー/値ストレージ システムです。メッセージ キューの分野では、Redis はパブリッシュおよびサブスクライブ モデルを実装するためのパブリッシュ/サブスクライブ メカニズムを提供します。この記事では、Redis の pub/sub メカニズムと、Redis を使用してメッセージ キューを実装する方法を紹介します。
1. Redis のパブリッシュ/サブスクライブ メカニズム
Redis のパブリッシュ/サブスクライブ メカニズムは、典型的なパブリッシュおよびサブスクライブ モデルです。チャネルに基づいてメッセージ配信を実装します。パブリッシャーは指定されたチャネルにメッセージをパブリッシュし、サブスクライバーは 1 つ以上のチャネルにサブスクライブして、パブリッシャーによってチャネル内でパブリッシュされたメッセージを受信できます。
Redis パブリッシャーは、PUBLISH コマンドを使用して、指定されたチャネルにメッセージを送信します。たとえば、次のコマンドは、channel1 という名前のチャネルにメッセージを送信できます。
PUBLISH channel1 "Hello, Redis!"
Redis サブスクライバは、SUBSCRIBE コマンドを使用して 1 つ以上のチャネルにサブスクライブします。たとえば、次のコマンドは、channel1 と channel2 という 2 つのチャネルをサブスクライブできます。
SUBSCRIBE channel1 channel2
サブスクライバは、UNSUBSCRIBE コマンドを使用して指定されたチャネルからサブスクライブを解除するか、UNSUBSCRIBE コマンドを使用してすべてのチャネルからサブスクライブを解除できます。たとえば、次のコマンドを使用すると、channel2 の登録を解除できます。
UNSUBSCRIBE channel2
パブリッシャーがチャネルにメッセージを送信すると、このチャネルのすべての登録者がこのメッセージを送信します。受け取られる。たとえば、次のコードは、Redis モジュールを使用して Node.js の Channel1 と Channel2 をサブスクライブし、メッセージの受信時にメッセージの内容を出力する方法を示しています。
const redis = require("redis"); const client = redis.createClient(); client.on("message", (channel, message) => { console.log(`Received message '${message}' on channel '${channel}'`); }); client.subscribe("channel1", "channel2");
2. Redis を使用してメッセージを実装します。 queue
Redis の pub/sub メカニズムでは、メッセージ キューを簡単に実装できます。このモードでは、パブリッシャーはメッセージをチャネルにパブリッシュし、サブスクライバーはチャネルにサブスクライブし、メッセージの受信時に対応するロジックを実行します。たとえば、次のコードは、Redis を使用して基本的なメッセージ キューを実装する方法を示しています。
const redis = require("redis"); const client = redis.createClient(); // 消息处理函数 const handleMessage = (channel, message) => { console.log(`Received message '${message}' on channel '${channel}'`); // 执行一些操作... }; // 订阅队列channel const subscribeQueue = () => { client.subscribe("queue", (err, count) => { if (err) { console.error(err); } else { console.log(`Subscribed to ${count} channels`); } }); }; // 发布消息到队列channel const publishMessage = (message) => { client.publish("queue", message, (err) => { if (err) { console.error(err); } else { console.log(`Published message '${message}'`); } }); }; // 监听队列 const listenQueue = () => { client.on("message", handleMessage); }; // 初始化 const init = () => { listenQueue(); subscribeQueue(); }; init();
上記のコードでは、handleMessage、subscribeQueue、publishMessage の 3 つの関数を定義します。 handleMessage 関数は、サブスクライバがメッセージを受信したときに呼び出されるメッセージ処理関数です。 submitQueue 関数は、queue という名前のチャネルをサブスクライブし、サブスクライブが成功すると、サブスクライブされたチャネルの数が出力されます。 publishMessage 関数は、メッセージをキューにパブリッシュします。
3. メッセージ キューのアプリケーション シナリオ
Redis を使用してメッセージ キューを実装するための多くのアプリケーション シナリオがあります。一般的なアプリケーション シナリオの一部を次に示します。
非同期タスク処理では、通常、メッセージ キューは、非同期で実行する必要があるタスクを保存するために使用されます。そして、1 つ以上のワーカー プロセスがキューからタスクを取得して実行します。 Redis のパブリッシュ/サブスクライブ メカニズムは、この非同期タスク キューを非常に適切に実装できます。
シナリオによっては、チャット ルーム、リアルタイム通信、その他のシナリオなど、複数のクライアントにメッセージをブロードキャストする必要があります。メッセージ ブロードキャストは、Redis の pub/sub メカニズムを使用して簡単に実装できます。
電子メールの購読などのシナリオでは、ユーザーはいくつかのキーワードまたはタグを購読します。新しい電子メールがこれらのキーワードまたはタグに一致すると、電子メール情報を対応するチャネルに公開します。ユーザーは該当チャンネルに登録し、最新のメール情報をタイムリーに入手できます。
4. 概要
Redis のパブリッシュ/サブスクライブ メカニズムは、パブリッシュ モードとサブスクライブ モードを簡単に実装でき、メッセージ キューを実装する一般的な方法です。 Redis を使用してメッセージ キューを実装する場合は、同時アクセスやメッセージの損失などの問題に注意する必要がありますが、これらの問題はロックや永続化などによって解決できます。 Redis の pub/sub メカニズムについての理解を深めれば、Redis をより深く理解し、適用することができます。
以上がRedis はメッセージ キューを実装します: パブリッシュおよびサブスクライブ モデルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。