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负载过高.内存溢出.自然灾害等不可预期的原 ...
随机推荐
- AVL树的理解及自写AVL树
AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树.查找.插入和删除在平均和最坏情况下都是O(log n).增加和删除可能需要通过一次或多 ...
- linux查看服务安装目录
linux查看服务安装目录server dir 假如我们想查看 Redis 的安装目录 如果用命令 which redis 或者 whereis redis 都找不到安装目录, 可使用以下办法: ps ...
- Unity安装破解
最近,电脑重新安装的系统,然后的然后就是软件之类的都要重新安装 一.在unity官网下载对应版本对应系统,之后双击下载得到的.exe可执行文件. 二.选择对应的包和引擎安装的本地路径,等待安装完成. ...
- bootstrap-datetimepicker时间插件
bootstrap-datetimepicker时间插件 依赖的jar包 bootstrap的js和css jquery.js datetimepicker的js文件: bootstrap-datet ...
- 学习Struts--Chap04:result中type属性dispatcher、redirect、redirectAction、chain的区别
1.Struts2框架中常用的结果类型的分析和比较 dispatcher:缺省的result类型,type默认是dispatcher内部转发.如果不写type类型只写一个名字的话,不单是type类型默 ...
- java基础知识总结--对象的克隆
前提:在Java语言中所有的类的都是缺省的继承Java语言中的Object类的, protected native Object clone() throws CloneNotSupportedExc ...
- 命令和python模式转换
安装完paython成功之后,就必须了解一下:命令模式和python交互模式 1.我们输入 cmd 之后进入的运行环境就是命令模式 2.在命令模式下输入 python,看到>>> ...
- GMA Round 1 逃亡
传送门 逃亡 你在森林中,遇到了一只老虎.此时此刻,老虎在(0,0)的位置,你在(2,1)的位置. 你开始沿着一条林间小路逃亡,移动向量是$(\frac{\sqrt{6}}{2},\frac{\sqr ...
- jQuery 学习(1)——认识jQuery
1.下载 下载地址:http://jquery.com/download/ jquery-3.2.1.js——用于开发和学习(229K) jquery-3.2.1.min.js——用于项目和产品(31 ...
- Android的Databinding-单向绑定
两种方式实现观察绑定. 一.POJO类实现android.databinding.Observable,在属性set方法中调用notifyPropertyChanged(BR.lastName); 其 ...