Java分布式集群,使用synchronized和Redis保证Job的原子性
1.使用synchronized保证并发时,同时只会有一个请求执行该代码段;
2.在执行前先设置并获取Reids标记,先设置然后获取确保是否已经执行;SetOption.SET_IF_ABSENT 可以保证Reids如果存在Key的话就不再Set;
public synchronized static boolean isWorking(final String keyLock, final String uuidValue,long seconds){
        if(null == keyLock || uuidValue == null) {
            return false;
        }
        RedisConnection redisConnection = null;
        try {
            JedisConnectionFactory jedisConnectionFactory = ac.getBean("jedisConnectionFactory", JedisConnectionFactory.class);
            StringRedisTemplate redisTemplate = new StringRedisTemplate(jedisConnectionFactory);
            String value = System.currentTimeMillis() + "::" + uuidValue;
            logger.info("{} 尝试获取锁: {}, value:{}", ip, keyLock, value);
            //必须设置和过期同时执行
            redisConnection = redisTemplate.getConnectionFactory().getConnection();
            redisConnection.set(keyLock.getBytes(),
                    value.getBytes(), Expiration.seconds(seconds), SetOption.SET_IF_ABSENT);
            if(value.equals(redisTemplate.opsForValue().get(keyLock))){
                logger.info("{} 成功获取锁: {}, value:{}", ip, keyLock, value);
                return true;
            }
            logger.info("{} 无法获取锁: {}, value:{}", ip, keyLock, value);
            return false;
        }catch(Exception e) {
            logger.error(e.getMessage(), e);
            return false;
        }finally {
            if(null != redisConnection) {
                redisConnection.close();
            }
        }
    }
Java分布式集群,使用synchronized和Redis保证Job的原子性的更多相关文章
- java分布式集群
		http://blog.csdn.net/guzicheng/article/details/11580841 
- Redis分布式集群几点说道
		原文地址:http://www.cnblogs.com/verrion/p/redis_structure_type_selection.html Redis分布式集群几点说道 Redis数据量日益 ... 
- Kafka分布式集群部署
		这个是kafka的官网地址:http://kafka.apache.org/ 1.kafka是一个消息系统. 2.kafka对流数据可以高效的实时处理. 3.分布式集群的环境下能够保证数据的安全. k ... 
- java高级精讲之高并发抢红包~揭开Redis分布式集群与Lua神秘面纱
		java高级精讲之高并发抢红包~揭开Redis分布式集群与Lua神秘面纱 redis数据库 Redis企业集群高级应用精品教程[图灵学院] Redis权威指南 利用redis + lua解决抢红包高并 ... 
- 分布式集群Session共享 简单多tomcat8+redis的session共享实现
		; i++) { str = str + session.getAttribute("name" + i) + "<br>"; } response ... 
- redis高可用分布式集群
		一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ... 
- 5   weekend01、02、03、04、05、06、07的分布式集群的HA测试  +  hdfs--动态增加节点和副本数量管理   +  HA的java api访问要点
		weekend01.02.03.04.05.06.07的分布式集群的HA测试 1) weekend01.02的hdfs的HA测试 2) weekend03.04的yarn的HA测试 1) wee ... 
- 10.Redis分布式集群
		10.Redis分布式集群10.1 数据分布10.1.1 数据分布理论10.1.2 Redis数据分区10.1.3 集群功能限制10.2 搭建集群10.2.1 准备节点10.2.2 节点握手10.2. ... 
- Redis 高可用分布式集群
		一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ... 
随机推荐
- 纯CSS实现展开列表
			效果预览 以下为源码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> &l ... 
- 阿里云EDAS在本地CentOS7.5 系统搭建测试环境,部署配置中心以及部署多个war包
			参考阿里云的EDAS开发文档: 使用 Ali-Tomcat 开发应用 我们自己在内网搭建CentOS7 的测试环境,需要的资源如下: Ali-Tomcat Pandora 容器 EDAS 配置中心安装 ... 
- Hadoop2.2.0集群的HA高可靠的最简单配置
			HA集群需要使用nameservice ID区分一个HDFS集群.另外,HA中还要使用一个词,叫做NameNode ID.同一个集群中的不同NameNode,使用不同的NameNode ID区分.为了 ... 
- 超级牛皮的oracle的分析函数over(Partition by...) 及开窗函数 (转)
			http://zonghl8006.blog.163.com/blog/static/4528311520083995931317/ over(Partition by...) 一个超级牛皮的ORAC ... 
- CSS之优先级
			css的优先级 所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 样式表中的特殊性描述了不同规则的相对权重,它的基本规则是: 1 内联样式表的权值最高 sty ... 
- django之Ajax初识
			Ajax准么说是用于Javascript与服务器端进行交互的,我们之前呢没有了解ajax也同样可以完成与服务器的交互,那么ajax的优势在哪里?首先ajax是异步交互的也就是说我们基本不会遇到卡顿现象 ... 
- 动态规划-最长上升子序列(LIS)
			时间复杂度为〇(nlogn)的算法,下面就来看看. 我们再举一个例子:有以下序列A[]=3 1 2 6 4 5 10 7,求LIS长度. 我们定义一个B[i]来储存可能的排序序列,len为LIS长度. ... 
- Deepin 15.4 更改为 阿里云源
			自带的 软件包源 不好用,卡顿严重,准备替换它: 方式一:deepin linux 如何更新或者更换软件源(注意:好像不起作用) 方式二:[推荐]利用 阿里云 提供的镜像快速更换本地的 yum 源 ( ... 
- Java的内存管理机制之内存区域划分
			各位,好久不见.先做个预告,由于最近主要在做Java服务端开发,最近一段时间会更新Java服务端开发相关的一些知识,包括但不限于一些读书笔记.框架的学习笔记.和最近一段时间的思考和沉淀.先从Java虚 ... 
- C# ExecutionContext 实现
			网上关于ExecutionContext的说明比较少,我们来看看微软的描述吧, 名称 说明 Capture() 捕获从当前线程的执行上下文. CreateCopy() 创建当前执行上下文的副本. ... 
