PHP怎么使用文件鎖解決高并發(fā)問題

這篇文章主要介紹了PHP怎么使用文件鎖解決高并發(fā)問題,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

成都創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、臨夏網(wǎng)站定制設(shè)計、自適應品牌網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、成都做商城網(wǎng)站、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為臨夏等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

新建一個.txt文件,文件中什么都不用寫。

【一】.阻塞(等待)模式:(只要有其他進程已經(jīng)加鎖文件,當前進程會一直等其他進程解鎖文件)

<?php
//連接數(shù)據(jù)庫
$con=MySQLi_connect("192.168.2.186","root","root","test");
//查詢商品數(shù)量是否大于0,大于0才能下單,并減少庫存
$fp = fopen("lock.txt", "r");
//加鎖
if(flock($fp,LOCK_EX))
{
  $res=mysqli_fetch_assoc(mysqli_query($con,'SELECT total FROM shop WHERE id=1 LIMIT 1'));
  if($res['total']>0){mysqli_query($con,'UPDATE shop SET total=total-1 WHERE id=1');}
  //執(zhí)行完成解鎖
  flock($fp,LOCK_UN);
}
//關(guān)閉文件
fclose($fp);
unset($res);
mysqli_close($con);
?>

【二】.非阻塞(等待)模式:(只要有其他進程已經(jīng)加鎖文件,當前進程不會等其他進程解鎖文件直接返回)

<?php
//連接數(shù)據(jù)庫
$con=mysqli_connect("192.168.2.186","root","root","test");
//查詢商品數(shù)量是否大于0,大于0才能下單,并減少庫存
$fp = fopen("lock.txt", "r");
//加鎖
if(flock($fp,LOCK_EX | LOCK_NB))
{
  $res=mysqli_fetch_assoc(mysqli_query($con,'SELECT total FROM shop WHERE id=1 LIMIT 1'));
  if($res['total']>0){mysqli_query($con,'UPDATE shop SET total=total-1 WHERE id=1');}
  //執(zhí)行完成解鎖
  flock($fp,LOCK_UN);
}
//關(guān)閉文件
fclose($fp);
unset($res);
mysqli_close($con);
?>

如果連接數(shù)據(jù)庫費時間的話,下面有個簡單的小demo,可以更直觀的理解下。

demo.php

<?php
$fp = fopen("file_lock.txt", "r");
// 加鎖
if(flock($fp, LOCK_EX))
{
  sleep(10);
  echo 1;
  //執(zhí)行完成解鎖
  flock($fp,LOCK_UN);
} else {
  echo 2;
}
//關(guān)閉文件
fclose($fp);

demo2.php

<?php
$fp = fopen("file_lock.txt", "r");
// 加鎖(如果改成flock($fp, LOCK_EX | LOCK_NB),demo2.php會直接返回2,否則會等待demo.php執(zhí)行完返回1)
if(flock($fp, LOCK_EX))
{
  echo 1;
} else {
  echo 2;
}
//關(guān)閉文件
fclose($fp);

同時運行兩個文件,然后修改demo2中加鎖機制,就可以看出來阻塞(等待)模式和非阻塞(等待)模式的區(qū)別了。

但是這樣會導致隊列堵塞,假如10個人同一秒寫入數(shù)據(jù)庫,那就堵塞了,第10個人會等待前9個都執(zhí)行完才會執(zhí)行!

感謝你能夠認真閱讀完這篇文章,希望小編分享PHP怎么使用文件鎖解決高并發(fā)問題內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細的解決方法等著你來學習!

當前名稱:PHP怎么使用文件鎖解決高并發(fā)問題
網(wǎng)站鏈接:http://bm7419.com/article40/pcieeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標簽優(yōu)化企業(yè)建站、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司搜索引擎優(yōu)化、網(wǎng)頁設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機網(wǎng)站建設(shè)