php 동시성 솔루션에는 다음이 포함됩니다. 1. 파일 잠금 2. 우리가 자주 사용하는 Memcacheq, Redis 등과 같은 메시지 대기열 4. Memcache 잠금.
해결책:
(추천 동영상 튜토리얼: java 동영상 튜토리얼)
1. 파일 잠금을 사용하세요
$fp = fopen("order.lock", "r"); if(flock($fp,LOCK_EX)){ //..处理订单的代码 flock($fp,LOCK_UN); } fclose($fp);
2. Memcacheq과 Radis를 자주 사용합니다.
예: 사용자가 확보할 수 있는 티켓이 100개인 경우 이 100개의 티켓은 캐시에 배치될 수 있으며 읽고 쓸 때 잠글 필요가 없습니다. 동시성이 큰 경우 약 500명 정도가 티켓을 성공적으로 획득할 수 있기 때문에 500명 이후의 요청은 이벤트 종료 시 바로 정적 페이지로 전환될 수 있습니다. 입장하는 500명 중 400명은 상품을 받는 것이 불가능하다. 따라서 대기열에 입장한 순서에 따라 선착순 100명만 구매에 성공하실 수 있습니다. 다음 400명은 이벤트 종료 페이지로 바로 이동됩니다. 물론 500명을 입력하는 것은 예시일 뿐이며, 숫자를 직접 조정할 수도 있습니다. 활동 종료 페이지는 데이터베이스가 아닌 정적 페이지를 사용해야 합니다. 이렇게 하면 데이터베이스에 대한 부담이 줄어듭니다.
3. 분산형 클러스터 서버라면 하나 이상의 큐 서버가 필요합니다.
샤오미와 타오바오의 급매입은 여전히 조금씩 다릅니다. 샤오미는 할당량을 잡는 순간에 집중합니다. 정산 주문을 할 수 있습니다. 반면에 Taobao는 결제 중 필터링에 중점을 두고 있으며, 예를 들어 10개의 항목을 판매하려는 경우 10명 이상의 사용자가 결제 중에 동시에 필터링을 수행하도록 합니다. , 동시성 양을 계층별로 항목 수를 줄입니다.
4. Memcache 잠금
product_lock_key를 사용하여 티켓 키를 잠그세요
memcached에 product_key가 있으면 모든 사용자가 주문 프로세스에 들어갈 수 있습니다.
결제 진입시 먼저 add(product_lock_key, “1″)를 memcached에 저장해 주시고, 반품이 성공하시면 결제 진입하세요. 실패하면 누군가 이미 결제 프로세스에 진입했다는 의미이며, 스레드는 N초 동안 대기한 후 재귀적으로 추가 작업을 수행합니다.
관련 권장 사항:
php training위 내용은 PHP 동시성 솔루션은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!