经常会有这样的需求,包含大量的延时执行任务
1,如一个代办事项app,代办实现可以设定触发时间,像闹钟一样。
2,如美团的订单,下单后10分钟不支付,会自动取消。
3,淘宝用户7天不确认收货,自动确认收货。
诸如以上需求,需要的就是一个延时任务执行系统。实现的方案有很多,各有优劣:
一,为每个任务创建一个倒计时线程
优点:实现简单,及时性高
缺点:严重浪费服务器CPU资源,如果数据量巨大,要创建多少线程啊;
线程和数据存在于内存中,宕机或redeploy后无法恢复;
二,定时任务扫描
利用定时任务轮询数据库,扫描出来到时间的数据。
优点:实现简单
缺点:扫描频率高的话,会浪费大量的服务器资源;
扫描频率低的话,及时性无法保证;
扫描频率中等的话,既浪费服务器资源,又无法保证及时性。
三,改良的定时任务扫描
将过期时间分为