基于Redis在定时任务里判断其他定时任务是否已经正常执行完的方案

本文讲述了在分布式系统中,如何通过Redis实现对依赖其他定时任务结果的操作进行控制,如跑批任务,通过设置key的值变化来检测任务执行完成。作者介绍了一个阻塞循环机制,直到依赖的任务执行完毕后,主任务才继续执行。
摘要由CSDN通过智能技术生成

执行的定时任务是基于其他定时任务计算得到的结果基础上做操作的,那么如何来确定其他存在数据依赖的定时任务已经执行完成呢?

在分布式环境里,可通过集群的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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朱季谦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值