php中队列控制的方法,学习猿地-php 队列的实现方法
php實現隊列的方法:首先新建一個文件“artisan.php”;然后通過“php artisan”執行隊列;最后進入redis客戶端輸入命令“lpush listname a b c d e f g”即可。
PHP實現隊列的原理(laravel)
用過laravel框架的童鞋都知道其自帶隊列功能,之前我很費解,PHP只是一個腳本,有超時機制。為什么能不停的去執行隊列呢?
我們新建一個文件queue.php<?php
while(true){
echo 1;
sleep(1);
}
然后中 命令行里面 執行 php queue.php
你會發現每秒鐘輸出一個1;等了很久,咦,很神奇,為什么php沒有超時呢?
對,就是不會超時,Why?
答:實際上PHP執行腳本是不會超時的,我們在網頁中看到的諸如504等超時,是由Apache,Nginx,PHP配置文件設置的超時時間決定的,因為PHP命令行執行文件沒有使用PHP配置文件,所以默認是不超時的。ps -ef | grep php
會發現有一個 php queue進程
php超時的疑惑我們解決了
再來看一下隊列的原理
新建一個文件 artisan.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 artisan 執行隊列
我們來新建一個窗口,進入redis客戶端輸入以下命令lpush listname a b c d e f g
會發現php artisan這個隊列會不斷的把redis里我剛剛push進去的值打出來
其實laravel的隊列就是這個原理,只不過,它不僅支持redis作為載體,還可以使用其他更多的數據庫
有人就要問了,我這php artisan.php啟動了,如果我把窗口關了不就沒用了嗎?不不不,Linux 還是可以在后臺運行的
只要在命令后面加個 &,或者nohup ... $ 放到后臺運行即可,當然也可以加入crontab定時任務里去執行。nohup php artisan.php &
總結
以上是生活随笔為你收集整理的php中队列控制的方法,学习猿地-php 队列的实现方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android11vivox21刷机包,
- 下一篇: hive 中某个字段等于0_快速了解hi