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