小编Luk*_*uke的帖子

PHP并发问题,多个同时发出的请求; 互斥?

所以我刚刚意识到PHP可能同时运行多个请求.昨晚的日志似乎显示有两个请求进入,并行处理; 每个触发从另一个服务器导入数据; 每个都试图将记录插入数据库.当它试图插入另一个线程刚刚插入一条记录的一个请求失败(导入的数据自带的PK,我没有使用递增的ID): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '865020' for key 'PRIMARY' ....

  1. 我是否正确诊断了此问题?
  2. 我该如何解决这个问题?

以下是一些代码.我已经删除了大部分内容(日志记录,从数据中创建患者以外的其他实体),但以下内容应包括相关的代码段.请求命中了import()方法,该方法基本上为每个要导入的记录调用importOne().注意importOne()中的save方法; 这是一个Eloquent方法(使用Laravel和Eloquent),它将生成SQL以适当地插入/更新记录.

public function import()
{
        $now = Carbon::now();
        // Get data from the other server in the time range from last import to current import
        $calls = $this->getCalls($this->getLastImport(), $now);
        // For each call to import, insert it into the DB (or update if it already exists)
        foreach ($calls as $call) {
            $this->importOne($call);
        }
        // Update the last import time to now …
Run Code Online (Sandbox Code Playgroud)

php concurrency mutex eloquent

28
推荐指数
3
解决办法
1738
查看次数

标签 统计

concurrency ×1

eloquent ×1

mutex ×1

php ×1