シミュレーションの準備 -- スクリプトへの高い同時アクセスをシミュレートする方法: 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 /** 模拟秒杀活动-- 商品100件 CREATE TABLE a ( id int comment '模拟100件活动商品的数量' ); INSERT INTO a VALUES(100); 模仿:以10的并发量访问这个脚本! 使用apache自带的ab.exe软件 */ error_reporting(0); mysql_connect('localhost','root','admin123'); mysql_select_db('test'); # mysql 锁 mysql_query('LOCK TABLE a WRITE');// 只有一个客户端可以锁定表,其他客户端阻塞在这 $rs = mysql_query('SELECT id FROM a'); $id = mysql_result($rs, 0, 0); if($id > 0) { --$id; mysql_query('UPDATE a SET id='.$id); } # mysql 解锁 mysql_query('UNLOCK TABLES');
PHP ファイル ロックのサンプル コード:
りー