用户下完订单到支付完成期间,需要锁定库存防止超卖,如何不依赖数据库,实现较高负载呢?

常见的方案是频繁的读取数据库中的订单,统计总库存占用,检查是否付款超时。如果系统的负载量较高,这种方案很快将数据库的CPU占用达到极限,系统响应速度迅速下隆。

我在一个项目中应用了消息队列(RabbitMQ)的方案实现的这个需求,分享一下。

简化流程:

下单时,第一步要操作的,就是遍历订单里的商品列表,将商品数量累加到 Redis 库存占用上,防止超卖。

在商品详情页,展示的 商品可用库存 = 商品库存 - 库存占用

第二步操作,将订单写入MQ队列,因为订单是按时间顺序写入队列的,所以最先失效的订单一定是队首的订单。因此,计划任务只需要循环检查队首的订单

  • 如果订单付款时间未超时,假如还有 50 秒,则休眠 50 秒后继续处理。
  • 如果订单已到达超时时间,则检醒订单原始状态
  • 如果订单原始状态已非未付款(如已付款,已取消),则将订单移出队列,处理下一单
  • 如果订单原始状态仍为未付款,则释放库存占用

注意,取消订单操作需要主动释放库存占用。

计划任务内流程:

在我们的项目中,有一种特殊 VIP 的用户,他们的未付款超时时间长达12小时(普通用户半小时),他们常用这种方式免费锁定库存,我们暂不关注这种需求的合理性,系统如何实现呢?

在MQ中加一条队列即可,半小时超时的一个队列,12小时超时的一个队列

本文原始网址:未付款订单占用库存的MQ实现方案,转载请保留出处

未付款订单占用库存的MQ实现方案相关推荐

  1. 淘宝怎么多个订单一起付款_淘宝未付款订单如何催付?

    淘宝未付款订单如何催付? 很多人只认为运营就是技巧,其实客服也是需要技巧的,客服也是关键的数据支撑. 一个好的客服团队,能够很好地提高转化率.客单价.复购率,有效的降低退款率.纠纷等售后问题. 今天和 ...

  2. 下单后半小时未付款订单自动取消的实现,延迟队列

    下单后半小时未付款订单自动取消的实现,延迟队列 类似的需要: 订单的评论如果7天未评价,系统需要自动产生一条评论 订单的15天之后未点击收货,系统需要自动更改为已收货. ... 因为是需要一个常驻进程 ...

  3. Java 中Timer定时器设置订单提交后24小时未付款订单状态为已关闭。

    1. 简单的Timer定时器方法 public class CommTimer {/*** 设置指定24小时后执行*/public static void orderClose() {final Ti ...

  4. 把数据库里的未付款订单改成已付款,会发生什么

    导言 不知道大家在网上购物的时候,有没有这样的念头,如果能把未付款的订单偷偷用一条SQL改成已付款,该多么美好啊.那么在实际开发过程中,我们应当如何保证数据库里的数据在保存后不会被偷偷更改? 大家好我 ...

  5. 定时任务 - 定时关闭超期未支付订单

    /*** 关闭超时未支付订单*/ public void closeOrder(); @Transactional(propagation = Propagation.REQUIRED) @Overr ...

  6. 处理超时订单(超时未付款)的解决方案

    文章目录 1. 超时未支付订单处理 1.1 需求分析 1.2 实现思路 1.3 rabbitmq延迟消息 1.3.1 消息的TTL(Time To Live) 1.3.2 死信交换器 Dead Let ...

  7. 三小时未付款自动取消订单实现

    电商系统中,有这样的需求,用户下单三小时未支付就自动取消,具体如何实现的呢? 一.实现方案 通常实现方案有以下方式: 方式一 使用定时任务不断轮询取消,此种方式实现简单,但是存在一个问题,定时任务设置 ...

  8. 订单失效怎么做的_30 分钟未付款取消订单,怎么做?

    点击上方" 码农编程进阶笔记 ",选择"置顶或者星标" 文末有干货,每天定时与您相约! 第一次亲密接触 问题:我这边有个需求,用户下单后 30 分钟如果没付款就 ...

  9. 30 分钟未付款取消订单,怎么做?

    点击上方" 码农编程进阶笔记 ",选择"置顶或者星标" 文末有干货,每天定时与您相约! 第一次亲密接触 问题:我这边有个需求,用户下单后 30 分钟如果没付款就 ...

最新文章

  1. Dynamic Network Surgery for Efficient DNNs
  2. win7+php5.3.10下安装memcache (转)
  3. CentOS下与Apache连接的PHP多版本共存方案实现详解
  4. 谈表达式树的缓存(7):五种缓存方式的总体分析及改进方案
  5. C++总结笔记(五)——构造函数和析构函数
  6. vs2010中引入boost库
  7. 飞信for linux,开源飞信 Openfetion for Linux
  8. SpringCloud学习笔记023---分布式集群之_Windows下搭建zookeeper服务器
  9. php 分页 报表 框架,zentaoPHP框架的分页解决方案
  10. Apache常见配置及问题
  11. fractal 分形维数 盒子维 纹理特征
  12. sonic 架构学习
  13. 【华人学者风采】孙怡舟,加州大学洛杉矶分校
  14. 系统平台补流量会影响店铺吗?
  15. 对回合制游戏的探讨以及想法
  16. 3dmax2014植树插件_3DsMax种树插件:ForestPack Pro v6.1.2 For 2015-2019 updated Libraries
  17. python中rect函数_使用类和函数的面向对象Python-rectangle
  18. python技巧:如何使用Python对音频进行特征提取?
  19. 上网部署(锐捷交换机)
  20. windowsmobile 综合 注册表修改 CSDN 推荐tag:mp3 storage gprs 注册表 文件

热门文章

  1. 为了进阿里,我都做了哪些准备
  2. 如何在ubuntu16.04上阅读中国知网(CAJ格式)的文献
  3. mysql查询性别语句_mysql 语句根据身份证查询年龄,地址,性别
  4. python怎么用matplotlib_高效使用Python可视化工具Matplotlib
  5. 猜画小歌技术解密!推出一天 中国网民“疯”了
  6. 基于HTML电商项目的设计与实现—— HTML+CSS+JavaScrip家具网页设计实例 企业网站制作
  7. 对于不可控的事情,我们要保持乐观;对于可控的事情,我们要保持谨慎。--爱比克泰德
  8. 虚拟机:虚拟机参数设置
  9. Array.prototype.reduce用法
  10. 【6.20】sleep()和wait()的区别