제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>
위 코드를 인터넷에서 찾아서 수정했는데, 작동이 잘 될지, 아니면 더 좋은 제안이 있는지는 잘 모르겠습니다.
redis의 원자 행 연산을 사용하여 잠금을 구현하고 키를 표시로 설정할 수 있습니다.
nmq를 사용하면 됩니다.
포스터는 파일을 통해 독점 잠금을 추가한다는 의미입니다. 모든 주문이 생성되고 먼저 잠금을 획득한 다음 주문이 생성된다는 의미입니까? 연속작업이라 주문하기엔 TPS가 아쉽네요
사용자가 주문 버튼을 두 번 클릭하여 반복 주문이 발생했기 때문에 저자는 동시성을 언급했습니다. 그렇다면 이 시나리오에 사용할 수 있는 멱등성을 보장하는 미들웨어는 무엇입니까? requestId/token
프로그램에 잠금을 설정할 필요가 없고 데이터베이스에 고유 인덱스를 생성하기만 하면 성능이 최고입니다.
redis 잠금 사용
스울 mysql