1、定时任务

时效性差,会有一定的延迟,这个延迟时间最大就是每隔一定时间的大小,如果你设置每分钟定时轮询一次,那么理论上订单取消时间的最大误差就有一分钟,当然也可能更大,比如一分钟之内有大量数据,但是一分钟没处理完,那么下一分钟的就会顺延。效率低。对数据库的压力比较大。

2、被动取消

这种方式依赖于用户的查询操作触发,这也就是说如果用户不进行查询订单的操作,该订单就永远不会被取消。不会取消的订单,也就可能意味着库存可能被占用,也可以是被动取消 +定时任务的这种组合实现方式。这种情况下定时任务的时间可以设置的稍微“长“一点。

缺点:
会产生额外影响,比如统计,订单数,库存等产生影响。
影响用户体验,用户打开订单列表可能要处理大量数据,影响显示的实时性。

3.延时消息

针对时间轮算法或者说延时消息,目前有很多消息队列都支持,
比如 RocketMQ,RabbitMQ

  • 死信队列: TTL消息的存活时间、DLX即死信交换机
  • 时间轮:

12:00:00 时启动定时器。 插入任务「12:41:00」时,处理为 c(环数) = (12:41:00 - 12:00:00)/60 - 0 = 41,k(slot key) = (12:41:00 - 12:00:00)%60 - 0= 0;
每一个执行周期到对应的 slot 时,该 slot 对应的链表中所有节点剩余轮数-1 执行到 12:19:01 时,时间轮情况如下:


一个1天的定时器,时间轮分为3个,小时轮(24 slot)、分钟轮(60 slot)、秒轮(60 slot) 方便理解

4、延时队列

DelayQueue必须实现 Delayed 接口的

  • JDK 中提供了一组实现延迟队列的API,位于Java.util.concurrent包下DelayQueue

  • DelayQueue是一个BlockingQueue(无界阻塞)队列,

  • 它本质就是封装了一个PriorityQueue(优先队列),PriorityQueue内部使用完全二叉堆来实现队列元素排序。

  • 在向DelayQueue队列中添加元素时,会给元素一个Delay(延迟时间)作为排序条件,队列中最小的元素会优先放在队首。

  • 队列中的元素只有到了Delay时间才允许从队列中取出。

  • 队列中可以放基本数据类型或自定义实体类,在存放基本数据类型时,优先队列中元素默认升序排列,自定义实体类就需要我们根据类属性值比较计算了。

5、Redis 缓存

zset是一个有序集合,每一个元素(member)都关联了一个 score,通过 score 排序来取集合中的值。我们将订单超时时间戳与订单号分别设置为 score 和 member。系统扫描第一个元素判断是否超时。

订单超时-延时任务处理相关推荐

  1. 延时任务处理订单超时方案(非定时)

    在开发中,往往会遇到一些关于延时任务的需求.例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务.那么这里就会产生一个问题 ...

  2. 拼夕夕订单超时未支付自动关闭实现方案!

    " 在开发中,往往会遇到一些关于延时任务的需求.例如:生成订单 30 分钟未支付,则自动取消:生成订单 60 秒后,给用户发短信. 对上述的任务,我们给一个专业的名字来形容,那就是延时任务. ...

  3. ribbonmq超时配置_使用RabbitMQ实现订单超时取消(延迟队列)

    使用RabbitMQ实现订单超时取消,大致流程: 生产者生产一条设置了TTL的延迟取消订单消息=>延迟队列交换机(通过绑定路由键)=>消息投递至延迟队列=>消息延迟队列时间到期=&g ...

  4. 订单超时自动取消3种方案——我们用这种!

    大家好,大家对电商购物应该都比较熟悉了,我们应该注意到,在下单之后,通常会有一个倒计时,如果超过支付时间,订单就会被自动取消. 下单 今天,我们来聊聊订单超时未支付自动取消的几种方案. 1.定时任务 ...

  5. 订单超时未支付的解决方案

    订单超时未支付的解决方案 定时任务实现 被动取消 JDK的延迟队列 代码演示 时间轮算法 代码演示 Redis zset 实现延迟任务 代码演示 MQ 延时消息 代码演示 写在最后 在前面的文章 第三 ...

  6. 秒杀活动,提高性能,防止超卖,订单超时

    目录 初步思考 秒杀活动 订单防止超卖 订单超时如何处理 初步思考 原文地址 前端:页面尽可能静态化,css/js合并,减少请求数 扩容:增加机器,提高处理请求能力 限流:应用限流(nginx,tom ...

  7. DelayQueue延迟任务队列----实现订单超时修改订单状态处理,复制即用

    其实实现这种功能的方式有很多种MQ,Redis,以及DelayQueue,也是比较常见的. 如果完全没啥要求,而且服务器配置又好,也不在乎有没有空隙,那还可以采用定时任务做处理,直接定时刷数据库,但是 ...

  8. 订单超时未支付自动取消5种实现方案

    大家好,我是宝哥! 前言 在开发中,往往会遇到一些关于延时任务的需求.比如最近大家都在忙抢回家的火车票,当你下了一个订单没有支付时,会有一个倒计时,提示你半小时之内支付,否则会自动取消.这样的场景是如 ...

  9. 订单超时处理方案介绍

    在电商场景下,一个订单流程中有许多环节要用到超时处理,包括但不限于: 买家超时未付款:比如超过15分钟没有支付,订单自动取消. 商家超时未发货:比如商家超过1个月没发货,订单自动取消. 买家超时未收货 ...

最新文章

  1. Pytorch Bi-LSTM + CRF 代码详解
  2. 北航学长:DCIC 2021的算法方案讲解
  3. graphpad柱状图怎么加图例_如何用Graphpad prism添加多个图例
  4. C++与JAVA语言区别
  5. vs mfc数据与控件绑定错了_如何进行数据趋势分析?VS扩展工具——C1迷你图控件了解一下...
  6. gitolite 踩坑记
  7. js导出的xlsx无法打开_vue将数据导出为excel文件就是如此简单
  8. python写整数逆位运算_位运算
  9. 简单十步python使用django框架建立博客网站
  10. 30位中外大师的摄影箴言
  11. 焊武帝再爆肝造CPU,软硬件全自研,可玩游戏,基础器件成本不到1000元
  12. 应对当今的医疗器械软件测试开发挑战,如何选择测试软件
  13. 网页自动关机代码HTML,电脑如何自动关机
  14. 计算机usb口不识别读卡器,windows7系统下usb读卡器读不出来如何解决
  15. [Magento] Overriding Core files
  16. Lenovo Thinkpad T400在BIOS中开启VT虚拟化后无法生效?
  17. 怎么使用PluginBase进行Tekla二次开发
  18. Spring笔记——装配Bean
  19. 网银测试软件,光大银行网盾检测工具
  20. HTML CSS游戏官网网页模板 仿绝地求生吃鸡游戏网站 大学生游戏介绍网站毕业设计 DW游戏主题网页模板下载

热门文章

  1. Linux超级超级大全(值得收藏)
  2. 钉钉小程序免登录授权
  3. hive 查看表结构
  4. SqlServe查看锁表和解锁
  5. Springboot整合Elasticsearch搜索引擎+vue页面
  6. Linux系统下,智能中文车牌识别系统EasyPR的配置
  7. Windows远程时提示CredSSP加密数据库修正
  8. 如何沿着某一直线绘制特定物理场(高程、负荷场)剖面(Arcgis\GMT\MATLAB)
  9. C语言五子棋标记,C语言实现简易五子棋
  10. Git Flow 用法