代码之家  ›  专栏  ›  技术社区  ›  fico7489

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

  •  4
  • fico7489  · 技术社区  · 6 年前

    例如:当我想更新产品时,我为它创建作业并将作业放入队列。作业正在那里等待,但仍未处理,同时,我需要创建新作业以更新相同产品但具有不同数据的作业,现在我要从队列中删除旧的更新作业并将新作业推送到队列中,有什么想法吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Magus    6 年前

    我有个主意。 在每次作业分派时,您都会设置一个缓存键,这个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
    

    不查询队列,不猜测,不停止更新的中间执行。优雅的东西。告诉我你的想法。