项目基于springboot
首先是pom文件
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.4</version>
</dependency>
官方推荐使用redisson
直接上代码
注册
@Autowired
private RedissonClient redissonClient;
获取锁
RLock lock = redissonClient.getLock(RedisMeta.LOCK_KEY);
boolean getLock = false;
try {
getLock = lock.tryLock(2, 120, TimeUnit.SECONDS);
if (getLock) {
taskSync();
} else {
error("上一次还未执行完");
}
if (getLock && lock.isLocked()) {
lock.unlock();
}
} catch (InterruptedException interruptedException) {
log.error("分布式锁加锁异常", interruptedException);
Thread.currentThread().interrupt();
} finally {
if (getLock && lock.isLocked()) {
lock.unlock();
}
}
解释说明
测试中发现使用
lock.lock();
确实可以锁住不会并发执行。
但是第一个lock执行完之后第二个又开始执行,并不能达到仅执行一次的目的,所以此处使用tryLock