产生背景
支付订单,若指定时间内未支付,该订单失效
思考解决方案
1、定时任务
众所周知,定时任务可以解决类似的问题,包括大批量数据,都交给定时任务来完成。
2、延时线程
一个线程安全的阻塞队列 等可延时执行的方法
存在问题
定时任务方式明显力不从心,无法适时呈献给用户处理。而1s一次明显不合适。
延时线程,需要处理订单的时候再去唤醒线程,没有就挂起。还要持久化等等,技术要求好高啊,考虑的也要多。
对于我这样的草根来说,普通的技术控制,严谨的业务逻辑,就可以啦。
个人思路
参照redis的过期时间策略,通过懒删除、定时任务来实现订单过期的处理。
redis的过期的懒删除是通过客户端对key访问的时候进行判断(比如查询get)。
定时任务是对过期的key做处理,如果没有经过懒删除步骤,这一步可以删掉。
个人解决方案
当用户查询订单、订单列表时候,一条update语句(mysql)
update table_name set status=‘取消’ where userId = 1 and date_add(