我在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()需要很多时间。我怎么能这样做?
答案 0 :(得分:1)
与' How can I get a list of all jobs in a beanstalk tube?'回答, Beanstalkd不是一个数组。它不是为了搜索而设计的,只是为了让下一个工作继续下去。
你在群发预留/释放中所做的只是把它们放回队列中,很可能是你保留的下一个东西,等等,无休止的循环。
如果要查看特定作业 - 任务/名称/ ID是否在队列中,请在其他地方,在另一个数据存储中记录 - 例如Redis或memcached。将作业放入队列时创建一个条目,并在从Beanstalkd删除作业时将其删除。