日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql锁机制 php_MySQL锁机制和PHP锁机制

發布時間:2023/12/2 数据库 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql锁机制 php_MySQL锁机制和PHP锁机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

模擬準備--如何模擬高并發訪問一個腳本:apache安裝文件的bin/ab.exe可以模擬并發量 -c 模擬多少并發量 -n 一共請求多少次 http://請求的腳本

例如:cmd: apache安裝路徑/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:讀鎖|共享鎖 : 所有的客戶端只能讀這個表不能寫這個表

Write:寫鎖|排它鎖: 所有當前鎖定客戶端可以操作這個表,其他客戶端只能阻塞

注意:在鎖表的過程中只能操作被鎖定的表,如果要操作其他表,必須把所有要操作的表都鎖定起來!

PHP中的文件鎖 (鎖的是文件,不是表)

文件鎖的文件與表有什么關系?:一點關系也沒有,與令牌相似,誰拿到誰操作。所以表根本沒鎖。

測試時,有個文件就行,叫什么名無所謂

總結:

項目中應該只使用PHP中的文件鎖,盡量避免鎖表,因為如果表被鎖定了,那么整個網站中所有和這個表相關的功能都被拖慢了(例如:前臺很多用戶一直下訂單,商品表mysql鎖表,其他與商品表相關的操作一直處于阻塞狀態【讀不出來商品表】,因為一個功能把整個網站速度拖慢)。

我的一個項目就是O2O外賣,中午12-2點,晚上6點都是訂單高并發時,這種情況下,MySQL鎖顯然是不考慮的,用戶體驗太差。其實根據實際的需求,外賣可以不用設計庫存量的,當然除了秒殺活動模塊還是需要php文件鎖的。

應用場景:

1. 高并發下單時,減庫存量時要加鎖

2. 高并發搶單、搶票時要使用

MySQL鎖示例代碼:

/**

模擬秒殺活動-- 商品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文件鎖示例代碼:

/**

模擬秒殺活動-- 商品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');

# php中的文件鎖

$fp = fopen('./a.lock', 'r'); // php的文件鎖和表沒關系,隨便一個文件即可

flock($fp, LOCK_EX);// 排他鎖

$rs = mysql_query('SELECT id FROM a');

$id = mysql_result($rs, 0, 0);

if($id > 0)

{

--$id;

mysql_query('UPDATE a SET id='.$id);

}

# php的文件鎖,釋放鎖

flock($fp, LOCK_UN);

fclose($fp);

總結

以上是生活随笔為你收集整理的mysql锁机制 php_MySQL锁机制和PHP锁机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。