>  기사  >  백엔드 개발  >  mysql - PHP 동시 처리?

mysql - PHP 동시 처리?

WBOY
WBOY원래의
2016-08-04 09:20:53902검색

제3자 결제 인터페이스를 만들고 싶은데, 주문 시 동시 발생이 발생할 수 있어 걱정됩니다.

<code><?php

$fp = fopen('test.txt', 'r');

$try = 10;

do{
    $lock = flock($fp,LOCK_EX);//独占锁
    //没有获得锁释放cpu重新获取
    if(!lock){
        usleep(50000);  //0.05
    }
}while(!$lock && --$try > 0);

if($lock){

    /***********拿到锁的用户执行********/

    //在这里生成订单号,写入数据库, 跳转到支付页面.....

    flock($fp,LOCK_UN);
    fclose($fp);
}else{
    fclose($fp);
    die("系统繁忙,稍后再试");
}</code>

위 코드를 인터넷에서 찾아 수정했는데, 작동이 잘 될지, 아니면 더 좋은 제안이 있는지는 잘 모르겠습니다.

답글 내용:

제3자 결제 인터페이스를 만들고 싶은데, 주문 시 동시 발생이 발생할 수 있어 걱정됩니다.

<code><?php

$fp = fopen('test.txt', 'r');

$try = 10;

do{
    $lock = flock($fp,LOCK_EX);//独占锁
    //没有获得锁释放cpu重新获取
    if(!lock){
        usleep(50000);  //0.05
    }
}while(!$lock && --$try > 0);

if($lock){

    /***********拿到锁的用户执行********/

    //在这里生成订单号,写入数据库, 跳转到支付页面.....

    flock($fp,LOCK_UN);
    fclose($fp);
}else{
    fclose($fp);
    die("系统繁忙,稍后再试");
}</code>

위 코드를 인터넷에서 찾아서 수정했는데, 작동이 잘 될지, 아니면 더 좋은 제안이 있는지는 잘 모르겠습니다.

  1. redis의 원자 행 연산을 사용하여 잠금을 구현하고 키를 표시로 설정할 수 있습니다.

  2. nmq를 사용하면 됩니다.

  1. 포스터는 파일을 통해 독점 잠금을 추가한다는 의미입니다. 모든 주문이 생성되고 먼저 잠금을 획득한 다음 주문이 생성된다는 의미입니까? 연속작업이라 주문하기엔 TPS가 아쉽네요

  2. 사용자가 주문 버튼을 두 번 클릭하여 반복 주문이 발생했기 때문에 저자는 동시성을 언급했습니다. 그렇다면 이 시나리오에 사용할 수 있는 멱등성을 보장하는 미들웨어는 무엇입니까? requestId/token

  3. 을 통해 해결하세요

프로그램에 잠금을 설정할 필요가 없고 데이터베이스에 고유 인덱스를 생성하기만 하면 성능이 최고입니다.

redis 잠금 사용

스울 mysql

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.