PHP使用檔案鎖解決高並發步驟詳解

來源:互聯網
上載者:User
這次給大家帶來PHP使用檔案鎖解決高並發步驟詳解,PHP使用檔案鎖解決高並發的注意事項有哪些,下面就是實戰案例,一起來看一下。

建立一個.txt檔案,檔案中什麼都不用寫。

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

<?php//串連資料庫$con=mysqli_connect("192.168.2.186","root","root","test");//查詢商品數量是否大於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');}  //執行完成解鎖  flock($fp,LOCK_UN);}//關閉檔案fclose($fp);unset($res);mysqli_close($con);?>

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

<?php//串連資料庫$con=mysqli_connect("192.168.2.186","root","root","test");//查詢商品數量是否大於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');}  //執行完成解鎖  flock($fp,LOCK_UN);}//關閉檔案fclose($fp);unset($res);mysqli_close($con);?>

如果串連資料庫費時間的話,下面有個簡單的小demo,可以更直觀的理解下。

demo.php

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

demo2.php

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

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

但是這樣會導致隊列堵塞,假如10個人同一秒寫入資料庫,那就堵塞了,第10個人會等待前9個都執行完才會執行!

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

PHP裝飾器模式使用詳解

PHP動態擷取函數參數步驟詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.