标签:延时 订单 队列 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,超时 来源: https://www.cnblogs.com/qingxuan0316/p/16599748.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。