Redis实现分布式锁
基于Redisson
添加依赖
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.4</version>
</dependency>
使用
public class RedissonTest {
@Autowired
private RedissonClient redissonClient;
public void test() {
RLock lock = redissonClient.getLock("key");
try {
// 上锁,默认30s过期,当业务代码没有处理完的时候会自动续期
lock.lock();
// 业务代码,
Thread.sleep(40000);
// todo
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放锁
lock.unlock();
}
}
}
setnx
使用 SET key value [EX seconds] [PX milliseconds] NX
创建一个 key,这样就算加锁。其中:
NX :表示只有 key 不存在的时候才会设置成功,如果此时 redis 中存在这个 key ,那
么设置失败,返回 nil 。
EX seconds :设置 key 的过期时间,精确到秒级。意思是 seconds 秒后锁自动释
放,别人创建的时候如果发现已经有了就不能加锁了。
PX milliseconds :同样是设置 key 的过期时间,精确到毫秒级。