public class RedisDistributedLock {
private final RedisTemplate<String, String> redisTemplate;
private final ValueOperations<String, String> valueOperations;
public RedisDistributedLock(RedisTemplate<String, String> redisTemplate) {
this.redisTemplate = redisTemplate;
this.valueOperations = redisTemplate.opsForValue();
}
public boolean acquireLock(String lockKey, long expireTime) {
Boolean result = valueOperations.setIfAbsent(lockKey, "locked");
if (result != null && result) {
redisTemplate.expire(lockKey, expireTime, TimeUnit.MILLISECONDS);
return true;
}
return false;
}
public void releaseLock(String lockKey) {
redisTemplate.delete(lockKey);
}
}
@Service
public class MyService {
@Autowired
private RedisDistributedLock distributedLock;
public void myMethod() {
boolean lockAcquired = distributedLock.acquireLock("myLock", 5000);
if (lockAcquired) {
try {
} finally {
distributedLock.releaseLock("myLock");
}
} else {
}
}
}