2 回答

TA貢獻2051條經(jīng)驗 獲得超10個贊
首先你在shell下執(zhí)行php,完全沒有最長實行時間這一說,你完全可以把一個php腳本作為進程不停的監(jiān)聽。
但是,你用LIST做隊列系統(tǒng)完全沒必要,一個是BRPOP的block是有最長時間限制的,你不能一直hold在那里。而更好的選擇是利用redis的PUB/SUB機制來做
下面是一個簡單監(jiān)聽進程,它監(jiān)聽了channel-1,你在shell下執(zhí)行它不要關(guān)掉
<?php$redis->subscribe(array('channel-1'), function ($redis, $chan, $msg) { // do something echo $msg; });
然后在其它的程序里向channel-1發(fā)送你需要發(fā)送的消息
<?php$redis->publish('channel-1', 'hello, world!');
如果你需要用LIST來操作,完全可以不要用BRPOP,直接在循環(huán)中RPOP就行
<?phpwhile (true) { $msg = $redis->rPop('list-1'); if (false !== $msg) { // 這里處理消息 } // 這里可以sleep sleep(60); }

TA貢獻1804條經(jīng)驗 獲得超2個贊
BRPOPLPUSH source destination timeout
BRPOPLPUSH 是 RPOPLPUSH 的阻塞版本,當(dāng)給定列表 source 不為空時, BRPOPLPUSH 的表現(xiàn)和 RPOPLPUSH 一樣。
當(dāng)列表 source 為空時, BRPOPLPUSH 命令將阻塞連接,直到等待超時,或有另一個客戶端對 source 執(zhí)行 LPUSH 或 RPUSH 命令為止。
超時參數(shù) timeout 接受一個以秒為單位的數(shù)字作為值。超時參數(shù)設(shè)為 0 表示阻塞時間可以無限期延長(block indefinitely) 。
完全能夠用LIST構(gòu)建一個隊列,用BRPOPLPUSH不會有超時問題
- 2 回答
- 0 關(guān)注
- 143 瀏覽
添加回答
舉報