php實作佇列的方法:先新建一個檔案「artisan.php」;然後透過「php artisan」執行佇列;最後進入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;等了很久,咦,很神奇,為什麼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中文網其他相關文章!