网上商城有一个很常见的应用场景:一个订单未付费,二十四小时后自动取消,这个在程序上如何实现,有几种实现方法,每种方法的利弊是什么?
第一种方法:写个定时任务,在某个时间节点,定时检索订单表,有超过二十四小时的订单,统统修改为订单已取消;
实现难易程度:很容易实现,写个定时任务就可以了。
利:不会漏掉订单,只要是超过二十四小时未付款的订单,都可以被检索到、取消掉。
弊:不管有没有订单生成,有没有超过二十四小时未付款的订单,到了时间就必须去数据库检索。另外定在一个特定的时间点去执行数据库查询,会有过期未付款的订单处理的没那么及时。
定时任务代码实现参考:
SpringBoot定时任务小Demo,及Scheduled相关参数配置
第二种方法:在订单生成的时候,就把订单号放在缓存里,或是异步任务里,让它等待二十四小时;二十四小时后,再根据订单号去数据库中检索,查看该订单是否付款,如果已经付款了,操作结束;否则&#x