您好,登錄后才能下訂單哦!
通過使用ab做并發執行的時候,發現庫存減少不一致,為什么呢?
答:主要是由于并發的時候,多個php程序去操作了同一個資源,這個時候造成資源的搶奪,數據不一致。為了解決這個問題,可以使用php里面的文件鎖來實現。在多個php程序操作某一個資源的時候,需要先去獲取這個鎖資源,只有獲取到鎖的程序才有權限去操作資源。當操作完成后,釋放鎖資源,使得別的程序能再次去搶奪鎖資源
1.創建一把鎖,一個文本文件,隨意命名,lock.txt
$key = fopen('lock.txt','r');
do{
$lockStatus = flock($key,LOCK_EX);//獲得鎖
//為防止php占cpu不放
usleep(50000);//0.05s
}while(!$lockStatus);
//搶到鎖的程序可以操作資源
if($lockStatus){
//為防止高并發,所有程序寫在這里即可
//減一操作,多個程序去操作減一
$sql = "select * from kucun where goo_id =1";
$res = mysql_query($sql);
$data = mysql_fetch_assoc($res);
$data['kucun']--;
$sql = "update kucun set kucun = " . $data['kucun'] . "where good_id = 1";
mysql_query($sql);
echo "庫存正在減少";
flock($lockStatus,LOCK_UN);//釋放鎖
}else{
echo "系統繁忙!";
}
fclose($key);//關閉指向的文件
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。