执行的定时任务是基于其他定时任务计算得到的结果基础上做操作的,那么如何来确定其他存在数据依赖的定时任务已经执行完成呢?
在分布式环境里,可通过集群的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 }
 

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

  1. [Redis] 基于redis的分布式锁

    前言分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁. 可靠性首先,为了确保 ...

  2. apscheduler(定时任务) 基于redis持久化配置操作

    apscheduler(定时任务) 基于redis持久化配置操作 安装模块 pip install apscheduler 导入模块配置 ## 配置redis模块 from apscheduler.j ...

  3. 基于redis分布式缓存实现

    Redis的复制功能是完全建立在之前我们讨论过的基 于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要注意你 的 ...

  4. PHP【Laravel】delayer基于redis的实现订单超时改变状态

    实现这个功能前你需要知道以下,不然可能会比较吃力:1.服务器的计划任务,shell脚本,或者你有宝塔自带的计划任务会方便很多.2.有所了解Redis.3.会写PHP业务逻辑. 好了进入在正题,这里使用 ...

  5. 灵感来袭,基于Redis的分布式延迟队列(续)

    背景 上一篇(灵感来袭,基于Redis的分布式延迟队列)讲述了基于Java DelayQueue和Redis实现了分布式延迟队列,这种方案实现比较简单,应用于延迟小,消息量不大的场景是没问题的,毕竟J ...

  6. 基于Redis分布式BitMap的应用

    一.序言 在实际开发中常常遇到如下需求:判断当前元素是否存在于已知的集合中,将已知集合中的元素维护一个HashSet,使用时只需耗时O(1)的时间复杂度便可判断出结果,Java内部或者Redis均提供 ...

  7. 基于redis实现可靠的分布式锁

    什么是锁 今天要谈的是如何在分布式环境下实现一个全局锁,在开始之前先说说非分布式下的锁: 单机 – 单进程程序使用互斥锁mutex,解决多个线程之间的同步问题 单机 – 多进程程序使用信号量sem,解 ...

  8. 分布式锁 基于Redis

    分布式锁的实现(基于Redis) 参考:http://www.jb51.net/article/75439.htm http://www.linuxidc.com/Linux/2015-01/1118 ...

  9. 记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池

    前言: 首先表示抱歉,春节后一直较忙,未及时更新该系列文章. 近期,由于监控的站源越来越多,就偶有站源做了反爬机制,造成我们的SupportYun系统小爬虫服务时常被封IP,不能进行数据采集. 这时候 ...

  10. [转载] 基于Redis实现分布式消息队列

    转载自http://www.linuxidc.com/Linux/2015-05/117661.htm 1.为什么需要消息队列?当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消 ...

随机推荐

  1. Linux(一):Linux操作系统

    Linux(一):Linux操作系统 对于我们编程人员来讲,linux对于我们几乎已经是像windows对于普通用户一样,好像和同行交流说不会linux就像说不会用计算机一样羞耻.这里打算从头开始温故 ...

  2. C++:查漏补缺笔记

    文章目录 数组 一维数组 初始化数组 数组名 二维数组 函数 函数声明 函数的分文件 函数重载 指针 空指针 野指针 const 结构体指针 指针++ 指针与函数 地址传递 C++引用 面向对象易错点 ...

  3. 用 C 语言开发一门编程语言 — 交互式解释器

    目录 文章目录 目录 前言 环境 编译型 vs 解释型 实现交互式解释器 使用 GNU Readline 函数库 前言 通过开发一门类 Lisp 的编程语言来理解编程语言的设计思想,本实践来自著名的& ...

  4. Metabase 安装和使用教程

    Metabase 是一款开源的数据分析和商业智能工具,允许企业用户在几分钟内搭建起一个功能完善的数据探索和数据分析平台,不需要编写复杂的 SQL 查询语句或者使用专业的数据可视化工具,就可以轻松地探索 ...

  5. PVT:特征金字塔在Vision Transormer的首次应用,又快又好 | ICCV 2021

    论文设计了用于密集预测任务的纯Transformer主干网络PVT,包含渐进收缩的特征金字塔结构和spatial-reduction attention层,能够在有限的计算资源和内存资源下获得高分辨率 ...

  6. 【u8 login debug】u8 16.0 没有调试 login的解决办法

    16.0 没有调试 login,改一下注册表 就行[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Ufsoft\WF\V8.700]"Enable.Debu ...

  7. Vue cli路由

    上面是将Forecast组件作为了Home的子组件使用,现在我们将其作为一个路由组件使用. 在router/index.js路由系统注册路由: { path: '/forecast', name: ' ...

  8. AI 画图真刺激,手把手教你如何用 ComfyUI 来画出刺激的图

    目前 AI 绘画领域的产品非常多,比如 Midjourney.Dalle3.Stability AI 等等,这些产品大体上可以分为两类: 模型与产品深度融合:比如 Midjourney.Dalle3 ...

  9. linux Centos8系统,防火墙配置常用命令,systemctl 和firewall

    本文环境:Linux系统CentOS 8.2 64bit CentOS 7版本及以上版本较centos 6有较大改动,例如:采用systemctl命令来开启service,它是服务管理中主要的工具,融 ...

  10. 华擎B365M ITX ,SSD WIN7 电脑卡顿,4K异常,9代 I7

    华擎B365M ITX ,SSD WIN7 电脑卡顿,4K异常,9代 I7 故障现象: 新装的电脑,WIN7 电脑卡顿. 表现:我的电脑打开很慢,延时个1-3秒左右.任务管理器打开很慢,N秒. 换了块 ...