現在の位置: ホーム> 最新記事一覧> Redisメッセージを継続的に聞き、PHPを使用してキュータスクを処理する方法は?

Redisメッセージを継続的に聞き、PHPを使用してキュータスクを処理する方法は?

gitbox 2025-06-13

レディスとは何ですか?

Redisは、データベース、キャッシュ、メッセージミドルウェアとして使用できる高性能のオープンソース内メモリデータストレージシステムです。従来のリレーショナルデータベースと比較して、Redisはデータの読み取り速度、並行性機能、および機能的拡張に大きな利点があります。 Redisは、非同期タスクとリアルタイムデータフローの処理に適したメッセージキューを実装するパブリッシュ/サブスクライブモードもサポートしています。

Redisのパブリッシュ/サブスクライブモード

Redisのパブリッシュ/サブスクライブモードは、Pub/Sub Commandを介して実装されます。このモードで:

  • パブリッシャーは、パブリッシュコマンドを使用してメッセージをチャネルに公開します
  • サブスクライバーは、subscribeコマンドを使用して特定のチャネルを購読します
  • パブリッシャーがチャンネルにメッセージを送信すると、すべてのサブスクライバーがメッセージを受信します

このモードは、オンラインチャットルームやリアルタイムデータプッシュなど、リアルタイムのイベント処理に適しています。ただし、実際のアプリケーションでは、これらのメッセージを処理してビジネスロジックに変換する必要があります。

PHPを使用してRedisメッセージキューを継続的に聴きます

PHPのRedis拡張機能を介してRedisのメッセージキューを処理できます。この拡張機能は、Redisサーバーに接続し、チャネルを購読するのに役立ちます。チャネルに新しいメッセージがある場合、PHPスクリプトはメッセージを受信して​​処理します。

Redisサーバーに接続します

Redis拡張機能を使用する前に、最初に拡張機能をインストールする必要があります。インストールが完了したら、次のコードを介してRedisサーバーに接続できます。

 
$redis = new Redis();
$redis->connect('localhost', 6379);
  

ここでは、Redisインスタンスを作成し、ローカルRedisサーバーに接続します。 Redisサーバーが別のアドレスにある場合、サーバーのIPアドレスを指定するために `connect()`メソッドのパラメーターを変更できます。

Redisメッセージキューイングを購読します

Redisに接続した後、「subscribe()」メソッドを使用してチャネルにサブスクライブします。このメソッドは、チャネル名を含むパラメーターとして配列を使用します。たとえば、「MyChannel」と呼ばれるチャネルを購読できます。

 
$redis->subscribe(['mychannel'], 'callback');
  

このコードでは、「MyChannel」というチャネルを購読し、コールバック関数「CallBack」を指定します。 Redisがチャネルにメッセージを送信すると、PHPプログラムはコールバック関数を自動的に実行してメッセージを処理します。

サブスクライブメッセージを処理します

メッセージを受信した後、コールバック関数に処理ロジックを記述する必要があります。このコールバック関数は、メッセージが受信されたときにトリガーされ、Redisが送信したチャネルとメッセージのコンテンツを自動的に受信します。

 
function callback($redis, $channel, $message) {
  echo "Received message: $message\n";
}
  

この例では、コールバック関数は3つのパラメーターを受信します。「$ redis」はredisインスタンス、「$ channel」はチャネル名、「$ message」はメッセージコンテンツです。新しいメッセージが受信されると、関数はメッセージコンテンツを出力します。

完全なサンプルコード

以下は、Redisメッセージを継続的にリッスンし、PHPを使用してキュータスクを処理する方法を示す完全なサンプルコードです。

 
$redis = new Redis();
$redis->connect('localhost', 6379);
$redis->subscribe(['mychannel'], 'callback');

function callback($redis, $channel, $message) {
  $data = json_decode($message, true);
  processTask($data);
}

function processTask($data) {
  if ($data['task'] == 'send_email') {
    sendEmail($data['to'], $data['subject'], $data['content']);
  } elseif ($data['task'] == 'update_statistics') {
    updateStatistics();
  }
}

function sendEmail($to, $subject, $content) {
  // 電子メールコードを送信します
}

function updateStatistics() {
  // 統計コードを更新します
}
  

この完全な例では、PHPプログラムは「MyChannel」と呼ばれるチャネルを購読し、タスクタイプメッセージを受信するときに対応する処理関数を呼び出します。たとえば、タスクが「send_email」の場合、「sendemail()」関数がメールを送信するために呼び出されます。タスクが「update_statistics」の場合、 `updatestatistics()"関数は統計を更新するために呼び出されます。

要約します

PHPを使用してRedisのメッセージサブスクリプションを継続的に聴くことにより、キュータスクの非同期処理を実装して、システムパフォーマンスを大幅に改善できます。実際のアプリケーションでは、これらのキューを処理して使用するための処理と使用のためのメッセージキューに時間のかかるタスクを配置すると、システムの負荷を効果的に削減し、同時処理機能を改善できます。同時に、この方法は、リアルタイムのプッシュチャットルームやオンラインチャットルームなどのリアルタイムアプリケーションシナリオにも適しています。