django 如何解决订单30分钟后自动取消和数据库回库的问题?

用Django开发的一个商城网站,用户下订单后有30分钟的付款时间。
下订单的时候,数据库库存会减去交易量。

  1. 如何实现30分钟订单自动取消?
  2. 以及如何实现,取消后数据库回库的问题?

不考虑随意下单的情况(下单需要验证数据库库存是否足够,尽量保证下单完成后,只要在30分钟内完成支付操作就可以买到商品)

最好有相关的代码,万分感谢!

阅读 5.9k
4 个回答

为了保证性能不能直接去轮循数据库,另外为了保证30分钟及时释放订单总量,不能有太大延时比如由订单客户自己去触发取消,所以两种方案你挑一种

一、延时队列
把未付款订单按照先后顺序,插入队列,开启线程取队列的第一个,如果时间已到则移出队列关闭订单,如果时间未到
则线程等待相应的时间差

二、借用redis的失效通知
redis有个特性就是到期失效,把订单号和失效时间插入redis,当失效的时候走取消订单的流程

要求代码有点强人所难了,大家给公司写代码是拿钱的,大家在问答平台阅读分析找一下题主代码的问题和写一些概念性的简短代码是没有问题的,直接想让人帮你写具体的业务代码是不现实的。
说说我的想法,建立一张未付款订单表,付款后将订单移到正式的订单表里,每分钟检查一次未付款订单表,超时未付款的自动取消。

可以尝试写个定时脚本去调度处理这些超过30分钟未支付的订单,更新订单的状态。

celery定时任务

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题