訂單一定時間未支付,商品庫存自動回庫 redis實現方案
背景:
做商品支付的開發過程中,一個必須考慮到的環節:用戶在點擊下單購買,同時也點擊了支付,這時候由於各種原因,用戶長時間未支付,對於庫存有限的商品來說,一般會將當前訂單的商品庫存鎖定一段時間,這段時間一過,還未支付,庫存自動回庫,同時修改支付狀態,可以參照下12306的買票過程,對於這樣一種需求,我們有什麼開發成本低的方案呢?
方案:
如果你的後端是java開發的,那搞個schedule定時任務到時間了去查一下是否支付成功,如果沒有支付,回庫,改狀態,也比較簡單。
如果後端是php開發的呢,php搞不了多線程啊,只能linux開crontab 任務了,寫個php腳本,定時掃訂單吧。
今天提供的一種思路是利用redis的過期機制,以及過期回調來實現這個功能,對redis底層的操作封裝,java,php都有支持
已下以php為例簡要介紹實現方法
redis的過期回調這個功能很關鍵,需要在redis.conf中開啟配置
notify-keyspace-events "Ex"
php擴展redis.php已經封裝好了回調方法
public function psubscribe( $patterns, $callback ) {}
調用:
$redis_xx->psubscribe(array(__keyevent@0__:expired), psCallback);
function psCallback($redis_xx, $pattern, $chan, $msg){
$msg 為你設置的key,可以傳訂單ID過來,回調的時候用訂單ID去查詢付款狀態,同時判斷是否需要庫存回庫
}
這個回調監聽的腳本需要一直運行在後端的,否則redis的key過期後是無法通知到的,也就無法調用你的回調方法,我們可以用linux提供的命令 nohup xxx.php & 當前腳本迴轉到後端以進程方式運行,同時回生成一個叫nohup.out的文件用來記錄日誌,至此我們的方案介紹完畢
聞道課堂,最好用的在線知識分享平台,掃碼了解一下
推薦閱讀:
※如何推銷POS
※支付系統架構
※區塊鏈四大「殺手級」應用:暗網和黑市交易、數字黃金、支付、標記化
※聚合支付行業的基本情況?
※中小微實體商家如何管理好自己的客戶