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();
}
} }

最新文章

  1. [Java] Java解析XML格式Response后组装成Map
  2. [ 转载 ] kernel32.BaseThreadInitThunk
  3. 数据库存储ATM机,开户、查询等信息
  4. POJ 1065 Wooden Sticks Greed,DP
  5. easy datagrid 按钮控制
  6. Java入门知识点:
  7. ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法
  8. div容器内文本对齐--神奇的css
  9. Handler sendMessage 与 obtainMessage (sendToTarget)
  10. Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
  11. [Leetcode][Python]34: Search for a Range
  12. Java层与Jni层的数组传递(转)
  13. 【LOJ6067】【2017 山东一轮集训 Day3】第三题 FFT
  14. MyBatis注解方式批量插入操作
  15. 运行Python出错,提示“丢失api-ms-win-crt-runtime-l1-1-0.dll”
  16. 2分钟理解文件IO -我对文件IO的理解与实验对比
  17. TPL DataFlow初探(二)
  18. SpringBoot 核心配置
  19. hdu4280 Island Transport 最大流
  20. stl源码剖析 详细学习笔记 算法(5)

热门文章

  1. React Native使用init新建项目出现异常
  2. 编程菜鸟的日记-初学尝试编程-编写函数实现strcpy功能(总结考察点)
  3. sqli-labs Less-11 and Less-12
  4. hihocoder1524
  5. google 地址
  6. jQuery 选择同时包含两个或多个class的元素的实现方法
  7. Mac下的Jenkins安装
  8. Dockerfile的 RUN和CMD
  9. Exchange - Add Owner of Distribution Group
  10. 使用idea创建web项目