php使用redis作為訊息佇列--守護程序模式執行
阿新 • • 發佈:2018-12-14
出隊指令碼
編寫指令碼,通過crontab定時執行指令碼,從list的右邊取出錯誤處理。
這種方式的優點是不會出現資料的丟失,只有定時指令碼處理完相關資訊之後,才從佇列中取出;缺點也是顯而易見的,響應不夠及時,因為是定時訪問redis的list隊形,所以不能實時的處理佇列中的訊息。
$params = $redis->Rpop($key);
php實現
$redis = new Redis(); $redis->pconnect(RedisConfig::SERVERNAME, RedisConfig::PORT) or die("redis error connecting"); while(true){ try { $json = $this->redis->brPop('key', 0);//0表示無限阻塞等待 //dosomething } }
我們為了防止指令碼意外終止(發生錯誤等情況)不再工作,我們寫一個定時任務監控該指令碼的執行情況。
monitor.sh
#!/bin/bash
alive=`ps aux|grep **|grep -v grep|wc -l`
if [ $alive -eq 0 ]
then
nohup /usr/local/php-7.1/bin/php /**/**.php >> /**/**.log 2>&1 &
fi
1分鐘檢查一次
crontab -e
*/1 * * * * /var/www/monitor.sh