シミュレーションの準備 -- スクリプトへの高い同時アクセスをシミュレートする方法: Apache インストール ファイルの bin/ab.exe で同時実行量をシミュレートできます -c - 同時実行数をシミュレートする量 -n 合計何回 http://リクエストはスクリプトに対して要求されます
例: cmd: apache install path/bin/ab.exe -c 10 -n 10 http://web.test.com/test.php
【本題】
ロックMYSQL の場合:
構文:
LOCK TABLE テーブル名 1 READ |WRITE、テーブル名 2 READ|WRITE ................... [テーブルをロック]
UNLOCK TABLES [テーブルを解放]
Read : 読み取りロック|共有ロック: すべてのクライアントはこのテーブルの読み取りのみが可能ですが、このテーブルの書き込みはできません
書き込み: 書き込みロック|排他的ロック: 現在ロックされているすべてのクライアントはこのテーブルを操作でき、他のクライアントはブロックのみ可能です
注: 操作のみ実行できますテーブルのロック処理中 ロックされたテーブルを操作する場合は、操作対象のすべてのテーブルをロックする必要があります。
PHPのファイルロック(テーブルではなくファイルがロックされます)
ロックされたファイルとテーブルの間にはどのような関係がありますか? : まったく関係がありません。取得した人がそれを操作します。したがって、テーブルはまったくロックされていません。
テストするときは、ファイルが存在する限り、名前は関係ありません。
概要:
プロジェクト内の PHP ではファイル ロックのみを使用し、テーブル ロックを避けるようにしてください。がロックされている場合、このテーブルに関連する Web サイト全体のすべてがすべての機能が遅くなります (例: フロントデスクの多くのユーザーが注文しており、製品テーブルの mysql がテーブルをロックし、製品テーブルに関連するその他の操作) 1 つの機能が Web サイト全体の速度を低下させるため、ブロックされています [製品テーブルを読み取ることができません]。
私のプロジェクトの 1 つは O2O テイクアウトです。午後 12 時から午後 2 時までと午後 6 時は注文の同時実行性が高い時間帯です。この場合、MySQL ロックは明らかに考慮されておらず、ユーザー エクスペリエンスは非常に劣っています。実際、実際のニーズに応じて、持ち帰り用の在庫を設計する必要はありません。もちろん、フラッシュ セール アクティビティ モジュールに加えて、PHP ファイル ロックも必要です。
アプリケーションシナリオ:
1. 高い同時実行性で注文する場合、在庫を減らすときにロックが必要です
2. 高い同時実行性で注文してチケットを取得する場合、
MySQL ロックのサンプルコードを使用します:
Php コード
php
/**
フラッシュセールイベントのシミュレーション - 100 個の商品
CREATE TABLE a
(
id int comment '100 個のイベントアイテムの数量をシミュレーション'
);
INSERT INTO a VALUES(100);食べた: このスクリプトには 10 個の同時実行でアクセスしてください。 Apache に付属の ab.exe ソフトウェアを使用します
*/
mysql_connect('localhost','root','admin123');
#mysql Lock
mysql_query('LOCK TABLE a WRITE'); // 1 つのクライアントのみがテーブルをロックでき、他のクライアントはここでブロックされます
$rs = mysql_query('SELECT id FROM a'); $rs, 0, 0);
if($id > 0)
--$id;
mysql_query('UPDATE a SET id='.$id);
# mysql ロック解除 mysql_query('UNLOCK TABLES');PHP ファイルロックのサンプルコード:
Php コード
/**
フラッシュセールイベントのシミュレーション - 100 個の商品
CREATE TABLE a
(
id int comment '100 個のイベントアイテムの数量をシミュレート'