この記事は、PHP のロック機構の応用に関する記事を紹介しています。非常に参考になるので、困っている友人の助けになれば幸いです。
高い同時実行性とマイナス在庫の状況を解決する
他のプロセスがファイルをロックしている場合、現在のプロセスは待機します。他のプロセスがファイルのロックを解除した後も実行を継続します
flock($fp, LOCK_EX) //ファイル ロック
If otherプロセスが追加されました ファイルをロックします。現在のプロセスは他のプロセスがファイルのロックを解除するのを待たずに、直接戻ります。つまり、ロック コードを直接無視して、ファイルを閉じるブロックに進みます。
flock($fp,LOCK_EX | LOCK_NB) //ファイル ロック
flock($fp, LOCK_EX)
および flock( $fp,LOCK_EX | LOCK_NB)
置換 クリックするだけで、他はすべて同じです
<?php $fp = fopen('lock.txt', 'r'); if( flock($fp, LOCK_EX) ){ // flock($fp,LOCK_EX | LOCK_NB) $info = D()->query('SELECT surplus_total_num FROM tb_product WHERE id=1 LIMIT 1'); if( $info['surplus_total_num'] > 0 ){ D()->execute('UPDATE tb_product SET surplus_total_num = surplus_total_num - 1 WHERE id=1'); $isSurplusProduct = 1; }else{ $isSurplusProduct = 0; } flock($fp, LOCK_UN); } fclose($fp); if( !$isSurplusProduct ) exit('已经没有产品了');
データベース インベントリに一貫性があり、ab パラメータが 0 のままであるかどうかを確認します: -c : 同時実行数; -n: リクエストの合計数
ab -c 20 -n 1000 http://www.test.com/test.php
関連する推奨事項:
以上がPHPにおけるロック機構の応用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。