PHP でキューを実装する方法: 最初に新しいファイル「artisan.php」を作成し、次に「phpArtisan」を通じてキューを実行し、最後に Redis クライアントに入り、コマンド「lpush listname a b c d e f g」を入力します。
推奨: 「PHP ビデオ チュートリアル 」
PHP キュー実装の原理 (laravel)
laravel フレームワークを使ったことがある人なら誰でも、キュー関数が付属していることを知っていますが、私は以前、PHP がタイムアウト機構を備えた単なるスクリプトであることに混乱していました。なぜキューを実行し続けることができるのでしょうか?
新しいファイル queue.php
<?php while(true){ echo 1; sleep(1); }を作成します
次に、コマンド ラインで php queue.php を実行します
待機後、1 秒ごとに 1 が出力されることがわかります。長い間、すごいですね、なぜphpがタイムアウトしないのですか?
Yes, it will not time out. Why?
回答: 実際、PHP 実行スクリプトはタイムアウトしません。Web ページで見られる 504 などのタイムアウトは、次の原因によって発生します。 Apache.Nginxでは、PHP設定ファイルに設定したタイムアウト時間が決まりますが、PHPコマンドライン実行ファイルはPHP設定ファイルを使用しないため、デフォルトではタイムアウトしません。
ps -ef | grep php
phpキュープロセスがあることがわかります
phpタイムアウトの問題は解決しました
キューの原理を見てみましょう
新しいファイル アルチザン を作成します。php
<?php $redis = new Redis(); $redis->connect('127.0.0.1',6379); while(1){ $res = $redis->lpop('listname'); if($res){echo $res."\r\n";} sleep(1); }
次に、php アルチザン実行キュー
新しいウィンドウを作成し、Redis クライアントに入り、次のコマンドを入力します
lpush listname a b c d e f g
php 職人キューが継続的に redis を実行することがわかります。先ほど入力した値を入力してください。
実際、laravel のキューはこの原則に基づいていますが、キャリアとして redis をサポートするだけでなく、他のデータベースを使用してください
誰かが尋ねたいのですが、私の php 職人.php が開始されました。ウィンドウを閉じたら、役に立たなくなりますか? いいえ、いいえ、いいえ、Linux はまだバックグラウンドで実行できます.
コマンドの後に & を追加するだけです, または nohup ... $ をバックグラウンドで実行できます. もちろん、crontab のスケジュールされたタスクに追加して実行することもできます。
rree以上がPHPキューの実装方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。