Redis隊列php多線程請求

在數據採集的過程中,會有很多次請求.每個請求要發送的信息無外乎都有一個關鍵的KEY,多數是ID.

把這個ID寫入到一個棧裏面



$redis->lpush("idlist",$id);

然後在PHP代碼裏面寫一個死循環



public function getinfos(){
    while(true){
        $id = $redis->lpop("idlist");
        if($id){
             //do something here/
        }else{
            break;
        }       
    }


}

然後再在外面這樣調用

function list_get_infos(){
        for($i=0;$i<10;$i++){
            exec("/usr/local/php/sbin/php","腳本地址");
        }
    }


如此一來,就會同時起10個進程來一起從這個redis的棧裏面pop出id,並通過ID獲取想要的數據.

注意:

1,首先進入死循環後,如果用過的變量一定要注意適時的銷燬.也就是unset.否則可能會導致內存溢出.

2,代碼裏要做合適的容錯處理,否則報錯的話會出現進程提前結束.

3,適當的輸出日誌.方便錯誤的處理.並且可以通過查看redis的隊列長度來判斷程序的執行結果.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章