订单超时、定时任务解决方案和思路

969 阅读2分钟

文章目录

一、方案选择

  • 1.redis数据超时处理
  • 2.使用spring + quartz定时任务(支持任务信息写入mysql,多节点分布式执行任务),下单成功后,生成一个30分钟后运行的任务,30分钟后检查订单状态,如果未支付,则进行处理
  • 3.写入数据库轮询
  • 4.使用Java的定时器,不支持高可用,设置定时器的节点挂掉或者重启,任务失效!

二、结论

推荐使用方案1和方案2,最终决定使用方案1

三、实施

项目目录
在这里插入图片描述

1.springboot引入redis

添加redis依赖
在这里插入图片描述

2.添加配置

在这里插入图片描述

在这里插入图片描述

3.监听数据超时

在这里插入图片描述

4.redis配置数据超时通知

在这里插入图片描述
修改 redis 相关事件配置。找到 redis 配置文件 redis.conf,查看 notify-keyspace-events 配置项,如果没有,添加 notify-keyspace-events Ex,如果有值,则追加 Ex,相关参数说明如下:

  • K:keyspace 事件,事件以 keyspace@ 为前缀进行发布
  • E:keyevent 事件,事件以 keyevent@ 为前缀进行发布
  • g:一般性的,非特定类型的命令,比如del,expire,rename等
  • $:字符串特定命令
  • l:列表特定命令
  • s:集合特定命令
  • h:哈希特定命令
  • z:有序集合特定命令
  • x:过期事件,当某个键过期并删除时会产生该事件
  • e:驱逐事件,当某个键因 maxmemore 策略而被删除时,产生该事件
  • A:g$lshzxe的别名,因此”AKE”意味着所有事件

6.测试controller

在这里插入图片描述

项目源码

没有积分、github可以留言邮箱,我看到就给发过去
github地址
csdn地址

参考文章

blog.csdn.net/q915002974/…
blog.csdn.net/sinat_37167…
blog.csdn.net/zhaoheng314…
blog.csdn.net/qq_41234832…
codingdict.com/questions/5…
www.bubuko.com/infodetail-…
小黄鸭编程社区
mp.weixin.qq.com/s/cfAXnh92R…