亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

PHP使用文件鎖解決高并發(fā)問(wèn)題示例

 更新時(shí)間:2018年03月29日 09:49:52   作者:2016_Create  
這篇文章主要介紹了PHP使用文件鎖解決高并發(fā)問(wèn)題,結(jié)合實(shí)例形式分析了php阻塞模式與非阻塞模式文件鎖解決高并發(fā)的相關(guān)使用技巧,需要的朋友可以參考下

本文實(shí)例講述了PHP使用文件鎖解決高并發(fā)問(wèn)題。分享給大家供大家參考,具體如下:

新建一個(gè).txt文件,文件中什么都不用寫(xiě)。

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

<?php
//連接數(shù)據(jù)庫(kù)
$con=mysqli_connect("192.168.2.186","root","root","test");
//查詢(xún)商品數(shù)量是否大于0,大于0才能下單,并減少庫(kù)存
$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ìn)程已經(jīng)加鎖文件,當(dāng)前進(jìn)程不會(huì)等其他進(jìn)程解鎖文件直接返回)

<?php
//連接數(shù)據(jù)庫(kù)
$con=mysqli_connect("192.168.2.186","root","root","test");
//查詢(xún)商品數(shù)量是否大于0,大于0才能下單,并減少庫(kù)存
$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ù)庫(kù)費(fèi)時(shí)間的話,下面有個(gè)簡(jiǎn)單的小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會(huì)直接返回2,否則會(huì)等待demo.php執(zhí)行完返回1)
if(flock($fp, LOCK_EX))
{
  echo 1;
} else {
  echo 2;
}
//關(guān)閉文件
fclose($fp);

同時(shí)運(yùn)行兩個(gè)文件,然后修改demo2中加鎖機(jī)制,就可以看出來(lái)阻塞(等待)模式和非阻塞(等待)模式的區(qū)別了。

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

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php文件操作總結(jié)》、《PHP常用遍歷算法與技巧總結(jié)》、《PHP數(shù)據(jù)結(jié)構(gòu)與算法教程》、《php程序設(shè)計(jì)算法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《php字符串(string)用法總結(jié)》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • PHP網(wǎng)站基礎(chǔ)優(yōu)化方法小結(jié)

    PHP網(wǎng)站基礎(chǔ)優(yōu)化方法小結(jié)

    以下這些基礎(chǔ)技巧可以讓你的PHP網(wǎng)站運(yùn)行得更快一些。
    2008-09-09
  • PHP入門(mén)教程之?dāng)?shù)組用法匯總(創(chuàng)建,刪除,遍歷,排序等)

    PHP入門(mén)教程之?dāng)?shù)組用法匯總(創(chuàng)建,刪除,遍歷,排序等)

    這篇文章主要介紹了PHP入門(mén)教程之?dāng)?shù)組用法,結(jié)合大量實(shí)例總結(jié)分析了php關(guān)于數(shù)組的創(chuàng)建、打印、遍歷、獲取、排序、插入、刪除等常見(jiàn)操作技巧,需要的朋友可以參考下
    2016-09-09
  • KindEditor在php環(huán)境下上傳圖片功能集成的方法示例

    KindEditor在php環(huán)境下上傳圖片功能集成的方法示例

    這篇文章主要介紹了PHP環(huán)境下如何實(shí)現(xiàn)使用KindEditor編輯器上傳圖片,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 如何解決php-fpm啟動(dòng)不了問(wèn)題

    如何解決php-fpm啟動(dòng)不了問(wèn)題

    在本篇文章里小編給大家整理的是一篇關(guān)于如何解決php-fpm啟動(dòng)不了問(wèn)題相關(guān)文章,有需要的朋友們可以跟著學(xué)習(xí)下。
    2021-11-11
  • 具有時(shí)效性的php加密解密函數(shù)代碼

    具有時(shí)效性的php加密解密函數(shù)代碼

    該函數(shù)具有時(shí)效性,只要過(guò)期就不能解密!通過(guò)時(shí)間動(dòng)態(tài)加密 加密后數(shù)據(jù)多樣化,增加破解難度
    2013-06-06
  • 最新評(píng)論