2017-08-23 213 views
0

我在pheanstalk隊列中遇到問題(版本:3.0.2)。在隊列中是0-10k作業,有時我必須搜索這個隊列中的數據並添加下一個作業。所以我想添加不存在的作業。pheanstalk快速搜索工作

在類Pheanstalk中,我沒有看到在作業中搜索並且沒有將此作業移動到「當前作業保留」的方法。

所以我需要快速的方法,只讀取作業中的數據,而沒有保留。

我的例子:

public function searchId($id) 
    { 
     $pheanstalk = $this->getPhenstalk(); 

     while ($job = $pheanstalk->reserveFromTube(self::TUBE)) { 
      $json = $job->getData(); 
      $data = json_decode($json, true); 

      if($data['id'] == $id){ 
       return true; 
      } 
      $pheanstalk->release($job); 

     } 
     return false; 
    } 

但RELASE()需要大量的時間。我如何做到這一點?

回答

1

如'How can I get a list of all jobs in a beanstalk tube?'的回答,Beanstalkd不是數組。它的設計目的不是爲了尋找下一份工作。

你對大容量儲備/釋放所做的事情只是把它們放回隊列中,很可能成爲你保留的下一個東西,等等無限循環。

如果您想查看某個特定的作業任務/名稱/ ID是否在隊列中,請在其他數據存儲的其他地方記錄備註 - 例如Redis或memcached。在將作業放入隊列時進行輸入,並在從Beanstalkd中刪除作業時將其刪除。