php 定時任務 檔案鎖 php檔案鎖解決高併發

2021-10-22 22:54:40 字數 1154 閱讀 2360

前面的文章對於高併發下單商品導致商品庫存為負值的問題請先閱讀再閱讀本篇文章一定對您有幫助,建議親手測試較好。

加上檔案鎖後的下單處理**:

【一】.阻塞模式:(如果其他程序已經加鎖檔案,當前程序會一直等其他程序解鎖檔案後繼續執行)<?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)

//執行完成解鎖

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)

//執行完成解鎖

flock($fp,lock_un);

//關閉檔案

fclose($fp);

unset($res);

mysqli_close($con);

使用ab.exe同樣500併發,資料庫的庫存保持為0,成功解決

php 定時任務 檔案鎖 PHP檔案鎖併發操作詳解

本文主要和大家分享php檔案鎖併發操作詳解,預設的 php的檔案操作函式,不是阻塞狀態,而是自由操作狀態,希望能幫助到大家。條件 當需要乙個指令碼操作而需要阻塞另外的指令碼操作時,需要用到檔案鎖。鎖操作流程 先加鎖,檢測鎖是否加成功,如果成功再使用!鎖定型別 讀鎖 s lock share lock...

php定時任務

php中執行定時任務有兩種情況,一種是直接在linux伺服器上直接建立cron服務,一種是在瀏覽器中執行。在linux中時間是寫死的,不能靈活變動。在瀏覽器中執行比較靈活,比如開啟乙個網頁後,從開啟此網頁開始,每十秒傳送乙個資訊到手機端 當要實現這樣的需求時,用cron服務就不太理想啦!此篇主要說一...

php 定時任務

crontab第一次使用真是個坑 crontab e 問題 第一次使用crontab 時,會出現 no crontab for root using an empty one select a editor 下面有幾個選項,就是叫你選擇編輯器。選3就可以了。如果你選錯了 可以輸入命令 select ...