首页 > 其他分享 >【面试】【5】如何取消超时未支付的订单?

【面试】【5】如何取消超时未支付的订单?

时间:2022-08-18 18:44:43浏览次数:68  
标签:延时 订单 队列 RabbitMQ 面试 key 超时

1、数据库轮询

  使用一个线程定时的去扫描数据库,通过订单时间来判断是否有超时的订单,然后取消操作

  缺点:存在延时,最差的延迟时间是设置的扫描间隔时间;对数据库性能消耗极大

 

2、JDK延迟队列

  使用JDK自带的DelayQueue来实现,是一个无界阻塞队列,该队列只有在延时时间到了才能获取元素

  缺点:服务器重启后数据会全部消失,并且在下单未付款的定单数太多的情况下,很容易出现OOM异常

 

3、使用Redis的keyspace

  Notifications特性(2.8版本以上),可以在key失效后,提供一个回调,生成订单后把订单号座位key,按订单有效时间设置失效时间,当监听道键失效的时候就可以执行修改订单标记为过期

 

4、使用Redis的zset

  超时时间作为score,细节待补充。。。

5、使用消息队列

  使用RabbitMQ模拟延时队列的功能

  RabbitMQ具有两个特性可以实现延迟队列,RabbitMQ的queue可以设置x-dead-letter-exchange和x-dead-letter-routing-key两个参数,用来控制队列内出现了死信的时候,按照这两个参数重新路由

  优点:容易进行横向发展,消息支持持久化,增加了可靠性

  缺点:引入RabbitMQ,所以复杂程度变大

标签:延时,订单,队列,RabbitMQ,面试,key,超时
From: https://www.cnblogs.com/qingxuan0316/p/16599748.html

相关文章

  • 那些没有答上来的面试题
    1、dockerrun和dockercreate有什么区别 2、du和df有何区别 3、free命令查看出来的buffer/cache是什么意思 4、linux中文件删除了之后,为什么磁盘空间没......
  • 2022年军队文职面试中问题以及需要注意的细节有哪些!!!
    阅前说明:1、报考的岗位是软件开发岗(技术岗)不是这个岗位小伙伴直接看最后提示就好了,信我一定会对你有帮助的。2、岗位报考率1:5最后进入面试的只有4个人,我排在第3位。(笔......
  • Vue面试题03:Vue生命周期相关
    生命周期相关定义:每个Vue组件实例在创建时都需要经历一系列的初始化步骤,比如数据监测,模板编译,挂载实例到DOM,以及在数据改变时更新DOM。在此过程中会运行被称为生命......
  • 不用定时器用接收超时做超时处理
    [原始代码]while(1){/*接收感兴趣的事件WRITE_EVENT,以永久等待方式去接收*/if(rt_event_recv(recvdata_event,WRITE_EVENT,RT_EVENT_FLAG_OR|RT_EV......
  • Java面试知识点总结(三)
    Java并发编程一、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"......
  • 自己整理的一定背的面试题
    ‌节流和防抖(实现的函数也看下)‌BFC‌flex布局‌盒模型‌浏览器储存机制、cookie原理‌‌promise调用‌ajax请求创建‌forin和forof的区别‌闭包和作用域‌原型链和thi......
  • Java面试知识点总结(二)
    字符串&集合面试题汇总一、Java中操作字符串都有哪些类?它们之间有什么区别?操作字符串的类有:String、StringBuffer、StringBuilder。String和StringBuffer、StringBu......
  • 时隔4个月我面试字节又挂了|总结与展望
    面试过程半个月之前,我又一次结束了字节的日常实习面试,前后持续一个多星期,每一面都是2天内出结果,第四面一周未出结果,询问hr,面试流程已经终止,是的,又挂了。相比于几个月的那......
  • 【Java面试】如果一个线程两次调用start(),会出现什么问题?
    “如果一个线程两次调用start(),会出现什么问题?”如果这个问题出自阿里p6岗位第一面的提问,你能回答出来吗?大家好,我是Mic,一个工作了14年的Java程序员。关于这个问题,涉及......
  • 面试突击75:SpringBoot 有几种读取配置文件的方法?
    SpringBoot中读取配置文件有以下5种方法:使用@Value读取配置文件。使用@ConfigurationProperties读取配置文件。使用Environment读取配置文件。使用@Proper......