標籤:

訂單一定時間未支付,商品庫存自動回庫 redis實現方案

訂單一定時間未支付,商品庫存自動回庫 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
支付系統架構
區塊鏈四大「殺手級」應用:暗網和黑市交易、數字黃金、支付、標記化
聚合支付行業的基本情況?
中小微實體商家如何管理好自己的客戶

TAG:Redis | 支付 |