使用redis实现分布式锁,与上图对应,代码如下:
public void test() {
String lockKey = "";
String randomUUID = UUID.randomUUID().toString();
//加锁 lockKey石锁
try {
Boolean result = stringRedisTemplate.opsForValue()
.setIfAbsent(lockKey, randomUUID, 30, TimeUnit.SECONDS);
new Thread(() -> {
if (stringRedisTemplate.hasKey(lockKey)) {
stringRedisTemplate.expire(lockKey, 10, TimeUnit.SECONDS);
}
}).start();
/**
* 中间处理逻辑
* */
} finally {
//解锁
if (randomUUID.equals(stringRedisTemplate.opsForValue().get(lockKey))) {
stringRedisTemplate.delete(lockKey);
}
}
**用redisson分布式锁**
@Autowired
private Redisson redisson;
public void test() {
String lockKey = "";
RLock lock = redisson.getLock(lockKey);
try {
lock.lock(30, TimeUnit.SECONDS);
/**
*中间处理逻辑
* */
} finally {
lock.unlock();
}
}