redis实现分布式锁(实现分布式锁util和使用)
·
1. maven配置
<dependencies>
<!-- Spring Boot Starter for Redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Lettuce client (可选,作为Redis客户端) -->
<dependency>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</dependency>
</dependencies>
2. 实现分布式锁util
@Component
public class RedisLockUtil {
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* 加锁
* @param key 锁的key
* @param value 锁的value
* @param timeout 锁的超时时间,单位为毫秒
* @return 是否成功获取锁
*/
public boolean lock(String key, String value, long timeout) {
Boolean result = stringRedisTemplate.opsForValue().setIfAbsent(key, value);
if (result != null && result) {
stringRedisTemplate.expire(key, timeout, TimeUnit.MILLISECONDS);
return true;
}
return false;
}
/**
* 解锁
* @param key 锁的key
* @param value 锁的value
* @return 是否成功释放锁
*/
public boolean unlock(String key, String value) {
String currentValue = stringRedisTemplate.opsForValue().get(key);
if (currentValue != null && currentValue.equals(value)) {
return stringRedisTemplate.delete(key);
}
return false;
}
}
3. 使用分布式锁
if (redisLockUtil.lock(lockKey, lockValue, accessTokenLockTimeout)) { // 加锁
try {
// 程序 todo
} catch (Exception e) {
// 异常 e.getMessage() todo
} finally {
redisLockUtil.unlock(lockKey, lockValue); // 释放锁
}
} else {
// log.info("加锁失败!");
throw new RuntimeException("原因:加锁失败!");
}
更多推荐




所有评论(0)