thinkpHP 프레임 워 크 낙관적 잠 금 및 비관 적 잠 금 사례 분석
낙관적 자물쇠:
예 를 들 어 판매 중인 핫 한 상품 에 대해 같은 시간 에 10 명 이 동시에 10 개의 스 레 드 를 시작 하여 구 매 했 고 10 개의 스 레 드 가 데이터 베 이 스 를 읽 은 재 고 는 20 건 과 version 이 9 이다.
그러면 낙관적 인 잠 금 은 num 수량 과 version 버 전 두 필드 를 읽 습 니 다.업데이트 결과 에 있어 서 우 리 는 조건 where version=9 라 는 문 구 를 업데이트 해 야 합 니 다.구체 적 인 UPDATE goods SET num=num-1,version=version+1 WHERE version=9 and id=1 을 업데이트 해 야 합 니 다.그러면 그 중 하 나 를 성공 적 으로 실행 하면 데이터 베이스 에서 version 의 값 은 10 입 니 다.그래서 나머지 9 명 은 모두 실패 할 것 이다.
$result = $this->mysqli->query("SELECT num,version FROM goods WHERE id=1 LIMIT 1");
$row = $result->fetch_assoc();
$num = intval($row['num']);
$version = intval($row['version']);
if($num > 0){
usleep(100);
$this->mysqli->begin_transaction();
$this->mysqli->query("UPDATE goods SET num=num-1,version=version+1 WHERE version={$version} and id=1");
$affected_rows = $this->mysqli->affected_rows;
if($affected_rows == 1){
$this->mysqli->query("INSERT INTO log(good_id) VALUES({$num})");
$affected_rows = $this->mysqli->affected_rows;
if($affected_rows == 1){
$this->mysqli->commit();
echo "success:".$num;
}else{
$this->mysqli->rollback();
echo "fail1:".$num;
}
}else{
$this->mysqli->rollback();
echo "fail2:".$num;
}
}else{
echo "fail3:".$num;
}
낙관적 잠 금 단점:4.567917.예 를 들 어 다른 사람 이 먼저 구 매 했 을 수도 있 지만 뒤에 있 는 것 을 먼저 샀 다 는 것 은 합 리 적 이지 않다.
낙관적 자물쇠 장점:
이것 은 초 발 현상 발생 을 피 할 수 있다비관 적 잠 금 my sql 코드:
# for update
select * from employee where id = 1 for update;
update employee set money = 0 + 1 where id = 1;
참조 링크:https://www.kancloud.cn/mikkle/thinkphp5_study/359349
thinkpHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 는 ThinkPHP 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thinkpHP 프레임 워 크 의 layer.js 패키지 및 사용 방법 예시이 글 의 사례 는 thinkpHP 프레임 워 크 에서 layer.js 의 패 키 징 과 사용 방법 을 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다. v 층:...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.