pensionstalk 快速搜索工作

pheanstalk search fast a job

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

在 class 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()需要很多时间。我该怎么做?

正如在“How can I get a list of all jobs in a beanstalk tube?”的回答中,Beanstalkd 不是一个数组。它不是为了被搜索而设计的,只是为了找到下一份工作。

您对 mass-reserve/release 所做的只是将它们放回队列中,很可能是您预订的下一件事,如此循环往复。

如果您想查看某个特定的 job-task/name/ID 是否在队列中,请在别处做个记录,在另一个数据存储中 - 例如 Redis 或 memcached。将作业放入队列时创建一个条目,并在作业从 Beanstalkd 中删除后删除它。