【问题标题】:Laravel queues are very long timeLaravel 队列很长
【发布时间】:2025-11-26 15:25:01
【问题描述】:

我正在使用数据库和本地机器在 Laravel 中使用队列。前两个队列元素执行得非常快。之后,就好像有什么东西被堵塞了,变得无穷无尽。这可能是由于大量的数据库请求。我尝试使用事务进行优化,但没有任何结果。我该怎么办?

public function handle()
{
    $this->DBtrans($this->arr);
}

public function DBtrans($prices){
    $count = 0;
    foreach ($prices as $price) {
        if ($count==0) DB::beginTransaction();
        $count++;

        DB::table('products')
            ->where('article','LIKE', $price[0])
            ->limit(1)
            ->update(['price'=>$price[1], 'presence'=>$price[2]]);

        if($count>=200) DB::commit();
    }
}

【问题讨论】:

    标签: database laravel transactions queue


    【解决方案1】:

    如果您有超过 200 个价格,则只有前 200 个价格会在交易中。 200 之后,您提交事务,但不重置计数,也不创建新事务。

    众所周知,LIKE 查询在速度方面很难,除非您正确设置了索引并且只对字符串的开头进行排队。不过,我真的不知道你 6 想用这个 LIKE 查询做什么。只检查第一个字符?这将导致许多更新。也可能是事情进展缓慢的原因。

    【讨论】:

    • 我使用“LIKE”查询是因为我按文章而不是 ID 比较产品。收到一个数组,其中包含文章列表及其价格。
    • 是的,我猜你的 LIKE 查询中没有通配符,所以你可以使用普通的where 很好地添加。但我仍然认为问题实际上在于您关闭了交易,而不是打开新的交易。