現在の位置: ホーム> 最新記事一覧> Redisメッセージを継続的に聴き、それらを処理するにはどうすればよいですか?

Redisメッセージを継続的に聴き、それらを処理するにはどうすればよいですか?

gitbox 2025-06-17

Redisメッセージサブスクリプションと公開

Redisは、文字列、ハッシュ、リスト、コレクションなどの複数のデータ構造をサポートするオープンソースメモリデータ構造ストレージシステムです。メッセージサブスクリプションと公開機能も提供し、クライアントが指定されたチャネルを購読し、新しいメッセージがチャネルで公開されたときに通知を受信できます。この記事では、PHPでRedisメッセージのサブスクリプションと継続的なリスニングを実装する方法を紹介します。

Redis拡張機能パッケージをインストールします

Redis拡張機能の使用を開始する前に、最初にインストールする必要があります。 PECLコマンドを介してインストールし、次のコマンドを実行できます。

 pecl install redis

システムがPECLをインストールしていない場合は、次のコマンドを介してインストールできます。

 sudo apt-get install php-pear

Redisに接続します

Redis拡張機能パッケージをインストールした後、次のステップはRedisサーバーに接続することです。 RedisクラスのConnectメソッドを使用して、接続を確立します。コードの例は次のとおりです。

 $redis = new Redis();
$redis->connect('127.0.0.1', 6379);
echo 'redis connected';

上記のコードでは、Connectメソッドの最初のパラメーターはRedisサーバーのIPアドレスであり、2番目のパラメーターはポート番号です。接続が成功した後、プログラムは「Redis接続」メッセージを出力します。

メッセージサブスクリプションと処理

Redisへの接続に正常に接続した後、メッセージチャネルにサブスクライブしてメッセージを処理することができます。 Redisは、サブスクライブおよびsubscribeメソッドをサブスクライブします。

購読メソッドは、以下に示すように、1つ以上の指定されたチャネルにサブスクライブします。

 $redis->subscribe(array('channel1', 'channel2'), function($redis, $channel, $message) {
    echo "Received message from channel: {$channel}, message: {$message}\n";
});

上記のコードでは、サブスクライブメソッドの最初のパラメーターはチャネル配列であり、2番目のパラメーターはコールバック関数です。コールバック関数は、メッセージを受信した後に実行されます。

psubscribeメソッドは、ワイルドカード文字の使用をサポートして複数のチャネルを購読します。例は次のとおりです。

 $redis->psubscribe(array('channel.*'), function($redis, $channel, $message) {
    echo "Received message from channel: {$channel}, message: {$message}\n";
});

上記のコードは、「チャネル」から始まるすべてのチャネルを購読することを意味します。

Redisメッセージを継続的に聴き、購読して処理する

プログラムを継続的にメッセージをリアルタイムでリアルタイムで処理させるために、whileループを使用してメッセージを継続的にリッスンすることができます。この関数を実装するコードは次のとおりです。

 $redis->subscribe(array('channel'), function($redis, $channel, $message) {
    echo "Received message from channel: {$channel}, message: {$message}\n";
    // 受信したメッセージの処理
});
while(true) {
    $redis->ping();
    sleep(1);
}

このコードでは、whileループは、redis接続がpingメソッドを介して正常であるかどうかを継続的に検出し、1秒に1回スリープします。

完全なコードの例

Redisメッセージサブスクリプションと継続的なリスニングを実装するための完全なPHPコードの例を次に示します。

 
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->subscribe(array('channel'), function($redis, $channel, $message) {
    echo "Received message from channel: {$channel}, message: {$message}\n";
    // 受信したメッセージの処理
});
while(true) {
    $redis->ping();
    sleep(1);
}

要約します

この記事を通して、PHPでRedis拡張機能パッケージを使用してサブスクリプションを継続的にリッスンし、Redisメッセージを処理する方法を学びました。メソッドをメッセージチャネルに購読およびpsubscribeし、hireループを使用してメッセージを継続的にリッスンする方法について説明し、受信したすべてのメッセージがリアルタイムで処理されるようにします。