鍍金池/ 問答/Python/ django 如何解決訂單30分鐘后自動(dòng)取消和數(shù)據(jù)庫回庫的問題?

django 如何解決訂單30分鐘后自動(dòng)取消和數(shù)據(jù)庫回庫的問題?

用Django開發(fā)的一個(gè)商城網(wǎng)站,用戶下訂單后有30分鐘的付款時(shí)間。
下訂單的時(shí)候,數(shù)據(jù)庫庫存會(huì)減去交易量。

  1. 如何實(shí)現(xiàn)30分鐘訂單自動(dòng)取消?
  2. 以及如何實(shí)現(xiàn),取消后數(shù)據(jù)庫回庫的問題?

不考慮隨意下單的情況(下單需要驗(yàn)證數(shù)據(jù)庫庫存是否足夠,盡量保證下單完成后,只要在30分鐘內(nèi)完成支付操作就可以買到商品)

最好有相關(guān)的代碼,萬分感謝!

回答
編輯回答
柒槿年

celery定時(shí)任務(wù)

2017年3月16日 20:02
編輯回答
裸橙

為了保證性能不能直接去輪循數(shù)據(jù)庫,另外為了保證30分鐘及時(shí)釋放訂單總量,不能有太大延時(shí)比如由訂單客戶自己去觸發(fā)取消,所以兩種方案你挑一種

一、延時(shí)隊(duì)列
把未付款訂單按照先后順序,插入隊(duì)列,開啟線程取隊(duì)列的第一個(gè),如果時(shí)間已到則移出隊(duì)列關(guān)閉訂單,如果時(shí)間未到
則線程等待相應(yīng)的時(shí)間差

二、借用redis的失效通知
redis有個(gè)特性就是到期失效,把訂單號(hào)和失效時(shí)間插入redis,當(dāng)失效的時(shí)候走取消訂單的流程

2017年11月14日 22:01
編輯回答
毀了心

可以嘗試寫個(gè)定時(shí)腳本去調(diào)度處理這些超過30分鐘未支付的訂單,更新訂單的狀態(tài)。

2018年2月19日 02:16
編輯回答
乖乖瀦

要求代碼有點(diǎn)強(qiáng)人所難了,大家給公司寫代碼是拿錢的,大家在問答平臺(tái)閱讀分析找一下題主代碼的問題和寫一些概念性的簡短代碼是沒有問題的,直接想讓人幫你寫具體的業(yè)務(wù)代碼是不現(xiàn)實(shí)的。
說說我的想法,建立一張未付款訂單表,付款后將訂單移到正式的訂單表里,每分鐘檢查一次未付款訂單表,超時(shí)未付款的自動(dòng)取消。

2018年3月31日 03:56