Laravel-是否可以从Redis队列中删除特定作业?

时间:2018-07-19 12:52:35

标签: php laravel laravel-5 laravel-5.2

例如:当我要更新产品时,我为此创建作业并将作业放入队列。作业在那里等待,但仍未处理,与此同时,我需要创建新作业来更新同一产品,但使用不同的数据,现在我想从队列中删除旧的更新作业,并将新的作业推入队列,有什么想法吗? / p>

1 个答案:

答案 0 :(得分:0)

我有个主意。 在每个作业调度上,您都将设置一个缓存键,该uuid也会在作业的属性上设置。

$uuid = uuid();
Redis::set("update-product-token-$ID",$uuid);
$data['uuid'] = $uuid;
ProductUpdateJob::dispatch($data);

在handle函数的第一行,检查redis令牌是否与作业的令牌匹配。如果没有,工作就会正常退出

$uuid = Redis::get("update-product-token-$ID",NULL);
if($uuid !== NULL && $uuid !== $this->uuid) return;
//proceed with update here

不查询队列,不猜测,不暂停执行中的更新。优雅的东西。让我知道你的想法。