PHP商品秒殺計時實現(解決大流量方案)

2021-07-09 02:37:59 字數 642 閱讀 8910

解決這個問題比較流行的思路:

1.用額外的單程序處理乙個佇列,下單請求放到佇列裡,乙個個處理,就不會有併發的問題了,但是要額外的後台程序以及延遲問題,不予考慮。

2.資料庫樂觀鎖,大致的意思是先查詢庫存,然後立馬將庫存+1,然後訂單生成後,在更新庫存前再查詢一次庫存,看看跟預期的庫存數量是否保持一致,不一致就回滾,提示使用者庫存不足。

3.根據update結果來判斷,我們可以在sql2的時候加乙個判斷條件update ... where 庫存》0,如果返回false,則說明庫存不足,並回滾事務。

4.借助檔案排他鎖,在處理下單請求的時候,用flock鎖定乙個檔案,如果鎖定失敗說明有其他訂單正在處理,此時要麼等待要麼直接提示使用者"伺服器繁忙"

阻塞(等待)模式

<?php 

$fp = fopen("lock.txt", "w+"); 

if(flock($fp,lock_ex)) 

fclose($fp); 

?>

非阻塞模式

<?php 

$fp = fopen("lock.txt", "w+"); 

if(flock($fp,lock_ex | lock_nb)) 

else

fclose($fp); 

參考的文獻

PHP加JS實現商品秒殺倒計時

php部分 php的時間是以秒算。js的時間以毫秒算 date default timezone set prc date default timezone set asia hong kong 地區 配置每天的活動時間段 starttimestr 2016 3 29 8 10 00 endtime...

04載入秒殺商品實現

當前已經完成了秒殺時間段選單的顯示,那麼當使用者在切換不同的時間段的時候,需要按照使用者所選擇的時間去顯示相對應時間段下的秒殺商品 3.4.1 秒殺服務 查詢秒殺商品列表 restcontroller seckillgoods public class seckillgoodscontroller ...

PHP Redis實現商品秒殺程式

如果你家店裡某商品庫存只有100件,現在店慶活動5折優惠大酬賓,假如現在有200個人瘋狂湧入你家店裡,為了避免發生瘋搶和 件發生,店長您採取了排隊限購的辦法,1人限購1件,排隊先到先買,賣完為止。這個是實體店我們會看到的場景,100件商品,1人1件,最後200人中只有100人能買到商品,剩下100人...