pheanstalk快速搜索工作

时间:2017-08-23 12:40:41

标签: php beanstalkd pheanstalk

我在pheanstalk中遇到队列问题(版本:3.0.2)。在队列中是0-10k个作业,有时我必须在此队列中搜索数据并添加下一个作业。所以我想添加不存在的工作。

在课程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 个答案:

答案 0 :(得分:1)

与' How can I get a list of all jobs in a beanstalk tube?'回答, Beanstalkd不是一个数组。它不是为了搜索而设计的,只是为了让下一个工作继续下去。

你在群发预留/释放中所做的只是把它们放回队列中,很可能是你保留的下一个东西,等等,无休止的循环。

如果要查看特定作业 - 任务/名称/ ID是否在队列中,请在其他地方,在另一个数据存储中记录 - 例如Redis或memcached。将作业放入队列时创建一个条目,并在从Beanstalkd删除作业时将其删除。