前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Redis在定时任务里判断其他定时任务是否已经正常执行完的方案

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

作者头像
朱季谦
发布2020-06-28 15:52:59
6610
发布2020-06-28 15:52:59
举报
文章被收录于专栏:编程技术沉思录

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

在分布式环境里,可通过集群的redis来解决这个问题:

即,在跑批任务开始时,将任务key+当日凌晨时间组成的key值进行加1,例如:

代码语言:javascript
复制
1 redisOperator.getJedis().incr(key+ startDateStr);
2 redisOperator.setKeyExpireTime(key+ startDateStr, 60*60*24);

跑批完成后,再将任务key+当日凌晨时间组成的key值减1,例如:

代码语言:javascript
复制
1 //跑批结束后自减
2 redisOperator.getJedis().decr(key+ startDateStr);

正常任务执行完,redis里对应的应该状态是0。

代码语言:javascript
复制
 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(Constants.RedisKey.OPERATION_RUNNING_FINISH_KEY + dateStr);
14 
15     if ("0".equals(runningFinishKey )) {
16         return true;
17     }
18     return false;
19 }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-06-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis®
腾讯云数据库 Redis®(TencentDB for Redis®)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档