我在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((需要很多时间。我该怎么做?
就像"我如何获得豆柄管中所有作业的列表?"答案一样,Beanstalkd 不是一个数组。它不是为搜索而设计的,只是为了获得下一份工作。
你对大规模保留/释放所做的只是将它们放回队列中,很可能是你保留的下一件事,依此类推,在一个无休止的循环中。
如果要查看队列中是否有特定的作业任务/名称/ID,请在其他位置(例如 Redis 或 memcached(中记下。在将作业放入队列时创建一个条目,并在从 Beanstalkd 中删除作业时将其删除。