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负载过高.内存溢出.自然灾害等不可预期的原 ...
随机推荐
- 创建触发器(trigger)
创建触发器 DROP TRIGGER IF EXISTS `ins_table_name`; DELIMITER ;; CREATE TRIGGER `ins_table_name` AFTER IN ...
- java-----任意进制间的转换
public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Sy ...
- 1. cs231n k近邻和线性分类器 Image Classification
第一节课大部分都是废话.第二节课的前面也都是废话. First classifier: Nearest Neighbor Classifier 在一定时间,我记住了输入的所有的图片.在再次输入一个图片 ...
- Understanding Built-In User and Group Accounts in IIS 7
Understanding Built-In User and Group Accounts in IIS 7 By lzb October 19, 2018 Introduction In earl ...
- win7的python3.5安装numpy包
1.你需要先确保已经安装了pip(因为我是我们需要用pip安装numpy包),我在cmd里面输入pip能显示pip的有关信息,所以我已经安装了pip了(其实是python3.x自带了pip) 如果没有 ...
- JAVA自学笔记13
JAVA自学笔记13 1.StringBuffer类 1)线程安全的可变字符序列 线程安全(即同步) 2)StringBuffer与String的区别:一个可变一个不可变 3)构造方法: ①publi ...
- datasnap isapi程序iis设置
datasnap isapi程序iis设置 添加ISAPI和CGI限制: 处理程序映射---添加模块映射: IIS应用程序池要如下设置: 停止ISAPI部署服务
- hql里面union和union all的区别
union和union all的区别是,union会自动压缩多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复. 注意,原来表里面的重复行也会被压缩. Union ...
- Exchange - Add Owner of Distribution Group
User Interface: Open Exchange Management Console. Expand Microsoft Exchange On-Premises, then right ...
- Docker配置参考
Docker配置参考 一.参数列表 参考网址:https://docs.docker.com/engine/reference/commandline/dockerd/#options Usage: ...