2017-08-23 5 views
0

私はpheanstalk(バージョン:3.0.2)のキューに問題があります。キュー内に0〜10kのジョブがあり、時にはこのキュー内のデータを検索して次のジョブを追加する必要があります。だから私は存在しないジョブを追加したい。pheanstalk fast jobを検索

Pheanstalkクラスでは、ジョブを検索する方法が表示されず、このジョブを「current-jobs-reserved」に移動しません。

私は、予約されていないジョブだけでデータを読み取る高速な方法が必要です。

私の例:

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から削除されたときにジョブを削除します。

関連する問題