集群服务器+定时任务(Quartz) 重复执行的问题
x
StackExchange.Redis
private readonly IDatabase _db;
string key = string.Concat("{自己命名的Redis前缀}", task.TaskDetailsId);
//获取本机服务器IP地址
string valIp = GetLocalIP();
//Redis缓存中的IP地址,
var valIpRedis = _db.StringGet(redisKey);
            /*
             * 方案1.每次都获取锁(redis.LockTake),而不去判断缓存中的值(valIpRedis)
             * 方案2.每次先判断缓存中的值(valIpRedis),没有缓存再去获取锁.
             * 目前采用的是方案2.
             *
             *      如果以后执行周期和缓存过期时间发生改变可能存在的风险:
             *      1.方案1风险:如果设置的过期时间比执行周期长,服务器都获取不到锁了,任务这次就不会执行,只能等到缓存清除之后才可以获取到锁.(例如:过期时间24H,执行周期1H,那么24H内,只会执行1次)
             *      2.方案2风险:服务器A刚获取完缓存的IP地址,就过期了,而服务器B此时也刚好获取到了锁.就会执行两次.(例如:过期时间1H,执行周期1H,那么1H内,可能会执行2次)
             */
            if (valIpRedis != null && valIpRedis == valIp)
            {
                isCanRun = true;
            }
            //如果Redis中没有缓存,去获取锁,获取成功,即可执行...
            else if (redis.LockTake(key, valIp, TimeSpan.FromMilliseconds(taskExpiry)))
            {
                isCanRun = true;
            }
            if (isCanRun)
       {
                    //记录日志{XX任务开始执行,服务器IP地址为xx.xx.xx.xx}
                    //开始执行各个定时任务{Quartz}
                    ((ITask)Activator.CreateInstance(Type.GetType("Your Class Type"))).Execute(task);
       }
传送门
x

集群服务器+定时任务(Quartz) 重复执行的问题的更多相关文章
- Spring+quartz集群解决多服务器部署定时器重复执行的问题
		一.问题描述 Spring自带的Task虽然能很好使用定时任务,只需要做些简单的配置就可以了.不过如果部署在多台服务器上的时候,这样定时任务会在每台服务器都会执行,造成重复执行. 二.解决方案 Spr ... 
- 集群服务器下使用SpringBoot @Scheduled注解定时任务
		原文:https://blog.csdn.net/huyang1990/article/details/78551578 SpringBoot提供了 Schedule模块完美支持定时任务的执行 在实际 ... 
- 集群服务器状态命令------rs.status()各个字段的含义
		可根据rs.status() 查询集群服务器状态.字段解释: self 这个信息出现在执行rs.status()函数的成员信息中 stateStr用户描述服务器状态的字符串.有SECONDARY,PR ... 
- 安装hadoop集群服务器(hadoop1.2.1)
		摘要:hadoop,一个分布式系统基础架构,可以充分利用集群的威力进行高速运算和存储.本文主要介绍hadoop的安装与集群服务器的配置. 准备文件: ▪ VMware11.0.0 ▪ Cen ... 
- 集群服务器 时间同步 - Chrony
		greenplum,openstack等云计算项目需要集群服务器部署,服务器之间的时间需要同步,但并不是所有机器可以 直接连外网,这时可以用Chrony工具解决. 解决方法是将其中一台设为时间服务器, ... 
- SQL Server集群服务器的优缺点
		由二台或更多物理上独立的服务器共同组成的“虚拟”服务器称之为集群服务器.一项称做MicroSoft集群服务(MSCS)的微软服务可对集群服务器进行管理.一个SQL Server集群是由二台或更多运行S ... 
- 集群服务器Session同步
		事实上,网站总是有状态的.每一个登录信息.用户信息常常被存储在session内部.而当一个网站被部署在不止一台服务器的时候,就会遇到session同步的问题.事实上即使一个很小的网站,也要至少有两台服 ... 
- Redis集群服务器-高可用调研随笔[转]
		今天改了一天的Bug,本想下午开始专研Redis命令集,结果也泡汤了.只能在下班的路上考虑下Redis集群服务器的高可用方案.随笔而已,尚未成型,仅作记录. 当然,我说的可能比较片面,欢迎拍砖.斧正. ... 
- 集群服务器、负载均衡和session共享,C#的static变量
		集群服务器:是指由两台以上服务器共同组成的服务器,目的是为了提高性能. 负载均衡:是基于集群服务器实现的,作用是当A服务器访问数达到一定上限时,接下来客户端的请求会自动分配给B服务器,目的是减少服务器 ... 
随机推荐
- MySQL/MariaDB数据库的用户和权限管理
			MySQL/MariaDB数据库的用户和权限管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.元数据数据库(mysql) 系统授权表(均在mysql数据库中): db hos ... 
- Python入门篇-面向对象概述
			Python入门篇-面向对象概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.语言的分类 面向机器 抽象成机器指令,机器容易理解 代表:汇编语言 面向过程 做一件事情,排出个 ... 
- zsh of kali
			首先安装zsh: # apt-get update # apt-get install zsh -y 然后直接使用仓库脚本: # sh -c "$(wget https://raw.gith ... 
- Failed to configure a DataSource: 'url' attribute is not specified and no embe...
			问题分析及解决方案 问题原因: Mybatis没有找到合适的加载类,其实是大部分spring - datasource - url没有加载成功,分析原因如下所示. DataSourceAutoConf ... 
- CentOS6.5配置
			关闭防火墙 查看防火墙状态 /etc/init.d/iptables status 停止 /etc/init.d/iptables stop 开机不启动 chkconfig iptables off ... 
- 前端知识--控制input按钮的可用和不可用
			最近在项目的开发的时候,自己虽然是写后端的,但是,在开发核心的时候,前端的知识自己还是会用到的,多以前端这块自己由于好长时间都没有去看,所以几乎已经忘记的差不多了,现在也只能是想起一点记录一点,以便能 ... 
- 学习Spring-Data-Jpa(十七)---对Web模块的支持
			Spring-Data还提供了Web模块的支持,这要求Web组件Spring-MVC的jar包位于classpath下.通常通过使用@EnableSpringDataWebSupport注解来启用继承 ... 
- S1_搭建分布式OpenStack集群_05 glance安装配置
			一.基本简介 镜像服务(glance)使用户能够发现,注册和检索虚拟机镜像. 它提供了一个REST API,使您可以查询虚拟机镜像元数据并检索实际镜像. 您可以将通过镜像服务提供的虚拟 ... 
- 原生js打地鼠
			我们要做的是一个打地鼠的游戏,只用原生js 1.导入需要的图片 2.编写页面css样式demo.css *{ margin:0; padding:0; } .game{ position: relat ... 
- 升级pip3的正确姿势--python3 pip3 update
			升级pip3的正确姿势为: pip3 install --upgrade pip 而不是 pip3 install --upgrade pip3 
