admin管理员组文章数量:1794759
redis 锁
代码语言:javascript代码运行次数:0运行复制demo1
public ErrorCode initDemo1(@RequestParam("orderNo") String orderNo) throws IOException {
String lockKey = KEY + orderNo;
Boolean hasKey = null;
try {
//锁判断
hasKey = redisTemplate.hasKey(lockKey);
int index = 0;
while (hasKey && index < 3) {
log.info(">>>>>>>>>>>>>刷新,wait>>>>>>>>>>>>>");
index++;
Thread.sleep(1500L * index);
hasKey = redisTemplate.hasKey(lockKey);
}
if (index > 0) {
log.info(">>>>>>>>>>>>>wait index:{} hasKey: {}", index, hasKey);
}
//加锁
redisTemplate.opsForValue().set(lockKey, "1", 5, TimeUnit.SECONDS);
//业务操作-刷新es todo 业务逻辑
//去锁
redisTemplate.delete(lockKey);
return ErrorCode.SUCCESS;
} catch (Exception e) {
//去锁
redisTemplate.delete(lockKey);
return ErrorCode.SYS_ERROR;
}
}
demo2
public ErrorCode initDemo2(@RequestParam("orderNo") String orderNo) throws IOException {
String lockKey = KEY + orderNo;
Boolean hasKey = null;
try {
hasKey = lock(lockKey, orderNo, 5);
if(hasKey != null && hasKey) {
//业务操作-刷新es todo 业务逻辑
}else {
return ErrorCode.LOCK_FAILED;
}
return ErrorCode.SUCCESS;
} catch (Exception e) {
return ErrorCode.SYS_ERROR;
} finally{
if(hasKey != null && hasKey) {
redisTemplate.delete(lockKey);
}
}
}
public boolean lock(String key, String value, long releaseTime) {
// 尝试获取锁 spring-data-redis 2.1版本以上 //implementation group: 'org.springframework.data', name: 'spring-data-redis', version: '2.1.0.RELEASE'
// Boolean boo = redisTemplate.opsForValue().setIfAbsent(key, value, releaseTime, TimeUnit.SECONDS); //.setIfAbsent(key, value, releaseTime, TimeUnit.SECONDS);
// 判断结果
// return boo != null && boo;
redisTemplate.setEnableTransactionSupport(true);
redisTemplate.multi();
redisTemplate.opsForValue().setIfAbsent(key,value);
redisTemplate.expire(key,releaseTime, TimeUnit.SECONDS);
List result = redisTemplate.exec(); // 这里result会返回事务内每一个操作的结果,如果setIfAbsent操作失败后,result[0]会为false。
if(result != null && true == (Boolean)result.get(0)){
return true;
}else {
return false;
}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2021-07-12,如有侵权请联系 cloudcommunity@tencent 删除returnstring事务nullredis本文标签: redis 锁
版权声明:本文标题:redis 锁 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754990586a1709144.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论