如何在 Laravel 中在一秒钟内发出并发请求时避免重复记录

Posted

技术标签:

【中文标题】如何在 Laravel 中在一秒钟内发出并发请求时避免重复记录【英文标题】:How to avoid duplicated records when concurrent requests make within a second in Laravel 【发布时间】:2017-03-07 08:49:58 【问题描述】:

请帮我找出问题。

有时(并非总是)我的以下代码会在 DB 中插入两条记录(到用户表和配置文件表中),但我在插入“mobile_no”之前检查是否已经存在以制作基于唯一手机号码记录。

 static function postData($data)  

    try 
if (isset($data['number'])) 
    //exist
    $exist = Profile::where('mobile_no', '=', $data['number'])->get(); 
   //print_r($exist);

    if (count($exist) > 0 )        
    $user = User::find($exist[0]['user_id']);
    if (isset($data['last_name'])) 
    $user->first_name = $data['first_name'];
    
    if (isset($data['last_name'])) 
    $user->last_name = $data['last_name'];
    
     if (isset($data['email'])) 
    $user->email = $data['email'];
    
    $user->save();
    $proid = $exist[0]['user_id'];
    $profile_result = Profile::find($proid);


    if (isset($data['number'])) 
    $profile_result->mobile_no = $data['number'];
    
     if (isset($data['birthday'])) 
    $profile_result->dob = $data['birthday'];
    



    $profile_result->save();
    return $exist[0]['user_id'];
    else

    $user = new User();
    if (isset($data['first_name'])) 
    $user->first_name = $data['first_name'];
    
    if (isset($data['last_name'])) 
    $user->last_name = $data['last_name'];
    


    $user->save();
    $id = $user->id;
    $profile = new Profile();

    $profile->user_id = $id;

    if (isset($data['mobile_number'])) 
    $profile->mobile_no = $data['number'];
    
    if (isset($data['birthday'])) 
    $profile->dob = $data['birthday'];
    
    $profile->save();

    $proid = $profile->user_id;
    $profile_result = $profile::where('user_id', '=', $proid)->get();

    $user_result = $user::where('id', '=', $id)->get();

    $output = array();




    return (string) $id;
    
    

     catch (Exception $ex) 
    
    return $ex;
    


    

【问题讨论】:

【参考方案1】:

对数据库使用索引UNIQUE,它将为您处理。请记住在尝试插入重复键时正确处理错误。

【讨论】:

以上是关于如何在 Laravel 中在一秒钟内发出并发请求时避免重复记录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Java EE 环境中实现请求限制?

如何在一秒钟内对数百万张人脸进行人脸识别

Laravel - 在数据库中在一列中插入动态图像数组 JQuery

Nativescript如何在后台发出http请求

高并发秒杀系统总结

HTTP 服务器应该如何在一秒钟内处理多个更改的 If-Unmodified-Since?