다음 튜토리얼 칼럼인 thinkphp에서는 높은 동시성 환경에서 ThinkPHP5와 프레임리스 코드의 효율성을 비교하여 소개하겠습니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!
테스트된 비즈니스 로직: 복권 기능을 테스트하고 MySQL 데이터베이스의 낙관적 잠금 메커니즘을 사용하여 과잉 발행을 방지합니다.
키 코드:
$prizeArr = array( array('level' => 1, 'name' => '手机', 'randnum' => 10), array('level' => 2, 'name' => '100元话费', 'randnum' => 5010), array('level' => 3, 'name' => '自拍杆', 'randnum' => 15010), array('level' => 4, 'name' => '5元红包', 'randnum' => 115010), ); $rand_num = mt_rand(1, 115010); $level = 4; for ($i = 0; $i < 4; $i++) { if ($rand_num <= $prizeArr[$i]['randnum']) { $level = $prizeArr[$i]['level']; break; } }
프레임워크 코드 없음:
$sql = "select * from `lottory` where id=".$level." "; $res = $rnpdo->RnFetchRow($sql, array()); $dataNum = $res['errmsg']['prizenum']; //剩余数量 $version = $res['errmsg']['version']; //版本号 $updatesql = "update `lottory` set prizenum=prizenum-1,version=version+1 where id=".$level." and version=".$version." "; $updateres = $rnpdo->RnExec($updatesql, array()); //print_r($res); if(!empty($updateres['errmsg'])) { //插入抽奖记录 $openid = $version.'-'.createOpenid(); $time = time(); $insertSql = "insert into `lottory_list` ( `openid`, `prize`, `posttime`) values ('$openid','$level','$time') "; $rnpdo->RnPtmQuery($insertSql, array()); echo 'success'; } else { echo 'fail'; }
thinkPHP5 코드 부분 사용:
$res = Db::table("lottory")->where('id',$level)->find(); $dataNum = $res['prizenum']; //剩余数量 $version = $res['version']; //版本号 dump($res); $result = Db::table('lottory')->where('id', $level)->where('version', $version)->update(['prizenum' => ['exp','prizenum-1'],'version' => ['exp','version+1']]); dump($result); if($result) { //插入抽奖记录 $openid = $version.'-'.createOpenid(); $time = time(); $data = ['openid' => $openid, 'prize' => $level,'posttime'=>$time]; Db::table('lottory_list')->insert($data); echo 'success'; } else { echo 'fail'; }
ab를 사용하여 높은 동시성에서 성능 테스트:
ab -c 1000 -n 10000 http://localhost/lottory.php ab -c 1000 -n 10000 http://localhost/index.php?s=index/index/hello
테스트는 동일한 서버에서 이루어지며 웹 서버는 nginx를 사용합니다. TP5는 로그 쓰기가 취소됩니다(처음으로 제거되지 않음, QPS가 낮음).
핵심 데이터:
프레임리스 QPS: 초당 요청: 972.21 [#/초] (평균)
thinkPHP5: 초당 요청: 206.92 [#/초] (평균)
동일한 비즈니스 로직, 프레임 없음 TP5의 4.7배이다.
TP5가 최적화되지 않은 영역이 있는지 모르겠습니다. 두 페이지 코드 모두 캐싱을 사용하지 않습니다.
tp5에 대해 깊이 이해하고 조언해 줄 수 있는 전문가가 있나요? 최적화가 필요한 다른 영역이 있나요?
위 내용은 높은 동시성에서 ThinkPHP5와 프레임워크 없는 코드의 효율성 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!