项目基于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
该博客介绍了如何在SpringBoot项目中使用Redisson实现分布式锁,通过配置pom.xml引入依赖,然后通过@Autowired注解注入RedissonClient。在代码示例中,展示了如何获取和释放锁,特别是使用tryLock方法避免并发执行问题。尽管lock.lock()可以锁定,但在实际测试中,未达到仅执行一次的效果,因此采用tryLock进行优化。
1423

被折叠的 条评论
为什么被折叠?



