解決高并發(fā),庫存為負(fù)數(shù)的情況
阻塞模式如果其他進(jìn)程已經(jīng)加鎖文件,當(dāng)前進(jìn)程會(huì)一直等其他進(jìn)程解鎖文件后繼續(xù)執(zhí)行
flock($fp, LOCK_EX) // 文件鎖
如果其他進(jìn)程已經(jīng)加鎖文件,當(dāng)前進(jìn)程不會(huì)等其他進(jìn)程解鎖文件,直接返> 回,也就是直接忽略加鎖的代碼到關(guān)閉文件那塊
flock($fp,LOCK_EX | LOCK_NB) // 文件鎖
flock($fp, LOCK_EX)
和 flock($fp,LOCK_EX | LOCK_NB)
換一下就行,其他都一樣
<?php$fp = fopen('lock.txt', 'r');if( flock($fp, LOCK_EX) ){ // flock($fp,LOCK_EX | LOCK_NB) $info = D()->query('SELECT surplus_total_num FROM tb_product WHERE id=1 LIMIT 1'); if( $info['surplus_total_num'] > 0 ){ D()->execute('UPDATE tb_product SET surplus_total_num = surplus_total_num - 1 WHERE id=1'); $isSurplusProduct = 1; }else{ $isSurplusProduct = 0; } flock($fp, LOCK_UN);}fclose($fp);if( !$isSurplusProduct ) exit('已經(jīng)沒有產(chǎn)品了');并發(fā)測(cè)試
查看數(shù)據(jù)庫的庫存是否一致保持為0 ab參數(shù):-c:并發(fā)數(shù);-n:總請(qǐng)求數(shù)
ab -c 20 -n 1000 http://www.test.com/test.php
相關(guān)推薦:
php如何實(shí)現(xiàn)等比例html' target='_blank'>壓縮圖片的代碼
php命令行編寫shell命令的實(shí)例
以上就是PHP中鎖機(jī)制的應(yīng)用的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注 其它相關(guān)文章!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選