You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel公共API高并发请求导致主键重复的解决方法咨询

Laravel公共API高并发下主键重复冲突的解决问题

背景

  • Stack Overflow上已有不少关于Laravel避免重复记录的讨论,但均未覆盖公共API场景,相关讨论主题包括:

    • How to handle QueryException for duplicate entries in Laravel
    • Laravel - Prevent multiple requests at the same time creating duplicate records
    • how to avoid duplicate entry in Laravel
  • 我开发的公共Laravel API支持创建客户、商品、发票等数据,端点每秒会被多次请求,部分开发者因循环逻辑错误,会触发MySQL报错:

#1062 - Duplicate entry for key 'PRIMARY'

  • 当前已有数十个实体在使用该API,用户量预计会大幅增长。

已尝试方案及遇到的问题

为避免MySQL报错,我添加了自定义数据库事务中间件,将所有API请求纳入事务:响应状态码为200时提交事务,否则回滚。

中间件代码

class CustomDBTransaction
{
    public function handle($request, Closure $next)
    {
        DB::beginTransaction();

        $response = $next($request);

        if ($response->getStatusCode() == 200)
            DB::commit();
        else
            DB::rollBack();

        return $response;
    }
}

中间件注册(Kernel.php)

'api' => [
    'throttle:60,1',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
    \App\Http\Middleware\CustomDBTransaction::class,
],

通过Postman压测后发现:该事务确实阻止了MySQL报错,但即使请求数据格式完全正确,端点也无法正常执行。

另外,throttle限流无法解决问题:即便限制每秒60次请求,多用户同时访问仍可能出现主键冲突。

求助

请问该如何缓解公共Laravel API高并发下的主键重复冲突问题?


内容的提问来源于stack exchange,提问作者Linesofcode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:47:50