gpt4 book ai didi

php - Laravel Queue 是否可以防止并发请求插入重复记录?

转载 作者:行者123 更新时间:2023-12-01 10:59:16 25 4
gpt4 key购买 nike

我们有一个带有 MariaDB 数据库的 Laravel API,我们遇到了数据库中由并发请求创建的重复记录的问题。

我们假设实现队列可以通过一次处理一个请求来解决这个问题。但是我们仍然有重复记录的问题。

在应用程序中,我们有一个查找重复项的检查,但是对于同时创建相同记录的并发请求,这当然不起作用。

我们无法在数据库级别使用唯一约束,部分原因是 Laravel 的软删除机制,部分原因是复杂的业务逻辑,如果其中一个字段的值与一组特定值匹配,则应该允许重复。

我们使用 Redis 作为队列驱动程序。

我们认为队列应该防止这些问题是错误的吗?还是我们在实现队列的某个地方犯了错误?

这是 Controller 的简化版本:

class CreateRecordJob extends Job implements SelfHandling
{

public function __construct(array $data)
{
$this->data = $data;
}

public function handle()
{
$data = $this->data;

// check if we have this record in the database already
if(!$this->hasDuplicate($data)) {
$this->createRecord();
}
}
}

在 config/queue.php 中,我们将 Redis 设置为默认队列驱动程序:

'default' => env('QUEUE_DRIVER', 'redis'),

而且在 config/queue.php 中我们有这个用于 redis 连接:

'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'expire' => 60,
],

最佳答案

基本上 - 不是
您可能会发现 FIFO 兼容队列驱动程序的实现laravel 有接口(interface) Illuminate\Console\Scheduling\Mutex 用于此目的,你需要扩展 queueManager 才能使用它

关于php - Laravel Queue 是否可以防止并发请求插入重复记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50064952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com