ホームページ  >  記事  >  データベース  >  MySQLのロック機構とPHPのロック機構

MySQLのロック機構とPHPのロック機構

巴扎黑
巴扎黑オリジナル
2016-11-08 13:39:021056ブラウズ

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

PHP ファイル ロックのサンプル コード:

りー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。