商城系统订单超时自动取消解决方案
生活随笔
收集整理的這篇文章主要介紹了
商城系统订单超时自动取消解决方案
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
功能說明
用戶下單后 30 分鐘如果沒付款自動(dòng)取消掉,然后釋放庫存,下面簡單介紹訂單超時(shí)自動(dòng)取消的幾種常用的方案。
1.定時(shí)輪詢
最簡單的方法,寫好取消訂單的邏輯,一般是取訂單表待付款狀態(tài)的訂單,然后做遍歷取消處理,使用Linux系統(tǒng)的crontab定時(shí)執(zhí)行取消訂單功能。
優(yōu)點(diǎn):簡單快捷,業(yè)務(wù)小的可以考慮
缺點(diǎn):
- 由于Linux的限制,只能精確到秒
- 輪詢頻率不能自主控制,如果運(yùn)維和開發(fā)分開管理,每次調(diào)整需要運(yùn)維配置修改
- 如果第一次輪詢耗時(shí)長,第二次輪詢又開始了,會(huì)造成任務(wù)重復(fù)執(zhí)行
- 占用數(shù)據(jù)庫資源
- 不能并發(fā)執(zhí)行
2.任務(wù)調(diào)度
一些web框架會(huì)帶有任務(wù)調(diào)度的功能,像php的Laravel框架。
優(yōu)點(diǎn):
- 輪詢頻率可以做到用代碼來控制,不完全依賴系統(tǒng);
- 任務(wù)可以做到不重復(fù)執(zhí)行
缺點(diǎn):跟定時(shí)輪詢差不多
3.延遲隊(duì)列處理
如果系統(tǒng)有太多的訂單需要處理,那么處理的時(shí)間就要很長,假如第一次輪詢還沒結(jié)束,第二次又開始了,就會(huì)造成任務(wù)的重復(fù)執(zhí)行,同時(shí)抑制占用數(shù)據(jù)庫資源,造成數(shù)據(jù)庫壓力大,用延遲隊(duì)列做取消訂單處理,設(shè)定延遲時(shí)間為提交訂單之后的30分鐘執(zhí)行,效率會(huì)高很多,常用的延時(shí)隊(duì)列有
- redis(訂閱鍵的失效事件)
- 框架自帶的隊(duì)列(例如Laravel框架自帶的隊(duì)列)
- rabbitMQ延遲隊(duì)列
優(yōu)點(diǎn):
- 不需要對訂單表輪詢處理,減少數(shù)據(jù)庫壓力
- 不會(huì)重復(fù)執(zhí)行
- 效率高
- 可配合多線程處理
- 業(yè)務(wù)量大的方便做集群
- 不依賴系統(tǒng)的crontab
缺點(diǎn):可能需要額外安裝隊(duì)列程序
總結(jié)
以上是生活随笔為你收集整理的商城系统订单超时自动取消解决方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdf安装
- 下一篇: 电商ERP软件、订单管理系统、库存管理系