Open yxxcoder opened 5 years ago
恩,不过现在有更简单的方案了,springboot2.1.x 支持setex 直接的写法了,不用这么麻烦了
/**
* 获取锁
*
* @param lockKey lockKey
* @param uuid UUID
* @param timeout 超时时间
* @param unit 过期单位
* @return true or false
*/
public boolean lock(String lockKey, final String uuid, long timeout, final TimeUnit unit) {
// 新版本 API 中已经直接支持 set nx 方式
Boolean success = stringRedisTemplate.opsForValue().setIfAbsent(lockKey, uuid, timeout, unit);
return success == null ? false : success;
}
你好,非常喜欢您的分享,在运行chapter22一章的demo时发现了两个问题,不知道是不是遗留的bug,如理解有问题,请指正😄
LockMethodInterceptor.java
这里的
String value = UUID.randomUUID().toString();
是不是有多线程问题,当第一个线程未处理完,第二个线程运行到这里是会刷新value,导致第一个线程unlock时会使用第二个线程的valueRedisLockHelper.java
我认为这里应该这样写
如理解有问题请指正😄