越努力,越幸运

朱季谦

腾讯云社区2022年度最佳作者、阿里云专家博主认证

基于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 }
复制代码

 

 
posted @   朱季谦  阅读(826)  评论(0编辑  收藏  举报
编辑推荐:
· 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框架的用法!
点击右上角即可分享
微信分享提示