0

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

4

1 回答 1

1

就像在'我如何获得豆茎管中所有工作的列表?' 回答,Beanstalkd 不是数组。它不是为搜索而设计的,只是为了获得下一份工作。

您对批量保留/释放所做的只是将它们重新放入队列中,很可能是您保留的下一个,等等,在一个无限循环中。

如果您想查看某个特定的作业任务/名称/ID 是否在队列中,请在其他数据存储区(例如 Redis 或 memcached)中记下。当您将作业放入队列时创建一个条目,并在作业从 Beanstalkd 中删除时将其删除。

于 2017-08-23T22:32:59.950 回答