開発プロセス中、SMS検証コードのプッシュ、システム通知など、PHPキューを使用するなど、メッセージの送信を遅らせる必要性は非常に一般的です。メッセージの遅延の送信を効果的に実現でき、非同期処理の効果はメッセージをキューに入れて遅延時間を設定することで達成されます。この記事では、Redisをキューサーバーとして使用するソリューションを紹介し、完全なPHPサンプルコードを装備して、すぐに開始するのに役立ちます。
Redisは、メッセージキューとして使用するのに最適なリストや順序付けられたコレクションなど、さまざまなデータ構造をサポートする高性能データベースです。まず、サーバーにRedisと対応するPHP拡張機能をインストールする必要があります。 Ubuntuシステムでは、次のコマンドを使用してインストールできます。
sudo apt-get redis-serverをインストールします sudo apt-getインストールphp-redis
インストールが完了した後、次のコードはRedisサーバーに接続する方法を示しています。
$ redis = new Redis(); $ redis-> connect( '127.0.0.1'、6379);
次の例は、Redisキューにメッセージを追加し、ポーリングと期限切れのメッセージの送信中に遅延送信時間を設定する方法を示しています。
//キューにメッセージを追加し、遅延時間を設定します(2番) 関数adddelayedMessage($ message、$ delay) { グローバル$ redis; //メッセージの送信タイムスタンプを計算しますします$ delayedtime = time() + $ delay; //注文されたセットにメッセージを追加すると、スコアは送信時間$ redis-> zadd( 'delayed_queue'、$ delayedtime、$ message)です。 } //有効期限をチェックして送信しますCheckDelayedMessages() { グローバル$ redis; while(true){ //今の時間前に送信する必要があるメッセージを得るします$メッセージ= $ redis-> zrangeByscore( 'delayed_queue'、0、time()、['limit' => [0、1]]); if(count($ message)> 0){ //ここで、エコーを使用して、メッセージを送信する動作しますをシミュレートしますecho "送信メッセージ:"。 $メッセージ[0]。 php_eol; //送信されたメッセージを削除$ redis-> zrem( 'delaed_queue'、$ message [0]); } それ以外 { //送信されるメッセージはありません。ループから抜け外します。 } } } //サンプル遅延メッセージを追加するAddLeayedMessage( 'メッセージ1'、300); // adddelayedMessage( 'Message 2'、600)を送信します。 // 10分後に送信// send checkdelayedmessages()を送信します。
上記のコードでは、AddLayedMessage関数がRedis順序付けセットにメッセージを追加し、スコアは将来の特定の時点(つまり、遅延時間)に設定され、遅延効果を達成します。 CheckDelayedMessages関数は、現在の時刻の前にメッセージを継続的にチェックし、シミュレーションが送信された後にキューからそれらを削除し、メッセージが繰り返し送信されないようにします。
PHPとRedisを組み合わせてメッセージキューを実装することにより、メッセージの送信要件を効率的に処理できます。 Redis Orderedコレクションは、非常に便利な時間並べ替え機能を提供し、遅延メッセージの管理をシンプルで直感的にします。このソリューションをマスターすると、システムの非同期処理機能とパフォーマンスが大幅に向上する可能性があります。