基于Redis在定时任务里判断其他定时任务是否已经正常执行完的方案
执行的定时任务是基于其他定时任务计算得到的结果基础上做操作的,那么如何来确定其他存在数据依赖的定时任务已经执行完成呢?
在分布式环境里,可通过集群的redis来解决这个问题:
即,在跑批任务开始时,将任务key+当日凌晨时间组成的key值进行加1,例如:
1 redisOperator.getJedis().incr(key+ startDateStr); 2 redisOperator.setKeyExpireTime(key+ startDateStr, 60*60*24);
跑批完成后,再将任务key+当日凌晨时间组成的key值减1,例如:
1 //跑批结束后自减 2 redisOperator.getJedis().decr(key+ startDateStr);
正常任务执行完,redis里对应的应该状态是0。
1 //阻塞循环,一直等到另外的定时任务跑成功了,才继续。 2 while (!checkCanRun(reportTime)) { 3 int interval = 7200000; 4 long sleepTime = System.currentTimeMillis(); 5 //休眠 6 logger.info("sendOperationDailyReportHandler sleep time = " + TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()-sleepTime) + " seconds"); 7 Thread.sleep(interval); 8 } 9 10 11 private boolean checkCanRun (DateTime reportTime) { 12 13 String runningFinishKey = redisOperator.getValueByKey(key + dateStr); 14 15 if ("0".equals(runningFinishKey )) { 16 return true; 17 } 18 return false; 19 }
分类:
Java开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!