Php+Redis隊列原理


我們新建一個文件queue.php

<?php
while(true){
  echo 1;
  sleep(1);    
}

然后中 命令行里面 執行 php queue

 

你會發現每秒鍾輸出一個1;等了很久,咦,很神奇,為什么php沒有超時呢?

對,就是不會超時,Why?

答:實際上PHP執行腳本是不會超時的,我們在網頁中看到的諸如504等超時,是由Apache,Nginx,PHP配置文件設置的超時時間決定的,因為PHP命令行執行文件沒有使用PHP配置文件,所以默認是不超時的

 

接下來我們演示redis+php實現隊列

新建一個文件 artisan.php

復制代碼
<?php
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
$redis->auth('123456');//因為此處我設置了redis密碼 while(1){ $res = $redis->lpop('listname'); if($res){echo $res."\r\n";} sleep(1); }
復制代碼

然后php artisan.php 執行隊列

 

 

我們來新建一個窗口,進入redis客戶端輸入以下命令【不會redis的可以在我的博客中找相關資料】

lpush listname a b c d e f g

會發現php artisan這個隊列會不斷的把redis里我剛剛push進去的值打出來

 

其實laravel的隊列就是這個原理,只不過,它不僅支持redis作為載體,還可以使用其他更多的數據庫


 

有人就要問了,我這php artisa.php啟動了,如果我把窗口關了不就沒用了嗎,

不不不,Linux 還是可以在后台運行的

只要在命令后面加個 &

php artisan &

就可以啦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM