製品ラッシュなどの同時実行シナリオでは、過剰販売が発生する可能性があります。現時点では、同時実行によって引き起こされる問題を解決する必要があります。
PHP 言語にはネイティブの提供がありません同時実行ソリューション同時実行制御を実現するには他の方法が必要です。
#オプション 1: ファイル ロックの排他的ロックを使用する
flock 関数を使用してファイル ロックを取得します。このロックは同時に 1 つのスレッドによってのみ取得できます。ロックを取得していない他のスレッドはブロックされるか、取得が失敗します。ロックを取得するときは、最初にインベントリをクエリします。インベントリが大きい場合は、在庫を減らしてからロックを解放します (推奨学習:PHP ビデオ チュートリアル )
オプション 2: Mysql データベースが提供する悲観的ロックを使用します。
Innodb ストレージ エンジンは行レベルのロックをサポートしています。データ行がロックされると、他のプロセスはデータ行を操作できなくなります。クエリとロック最初の行:
select stock_num from table where id=1 for update if(stock_num > 0){ //下订单 update table set stock_num=stock-1 where id=1 }
オプション 3: キューを使用する
ユーザーの注文リクエストをキューに順番に保存し、バックグラウンドで別のプロセスを使用して、キュー内の注文リクエストを処理するオプション 4: Redis を使用する
Redis の操作はすべてアトミックです。商品の在庫を Redis に保存できます。注文の場合、在庫に対して decr 操作を実行します。戻り値が 0 以上の場合など、注文できますが、それ以外の場合は注文できません。この方法の方が効率的ですif(redis->get('stock_num') > 0){ stock_num = redis->decr('stock_num') if(stock_num >= 0){ //下订单 }else{ //库存不足 } }else{ //库存不足 }
以上がPHP インターフェースは同時実行性をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。