【分布式锁】SpringBoot集成Redisson实现分布式可重入锁
warning:
这篇文章距离上次修改已过262天,其中的内容可能已经有所变动。
在Spring Boot中,你可以使用Redisson
来实现分布式可重入锁。以下是一个简单的例子:
- 首先,在
pom.xml
中添加Redisson
依赖:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.16.2</version>
</dependency>
- 在
application.yml
或application.properties
中配置Redisson
连接信息:
spring:
redisson:
address: redis://127.0.0.1:6379
password: your_password
- 使用
Redisson
提供的RLock
接口实现分布式锁:
import org.redisson.api.RedissonClient;
import org.redisson.api.RLock;
import java.util.concurrent.TimeUnit;
@Service
public class DistributedLockService {
@Autowired
private RedissonClient redissonClient;
public void lockAndExecute(String lockKey, long timeout, TimeUnit unit) {
RLock lock = redissonClient.getLock(lockKey);
try {
// 尝试获取锁,最多等待100秒,锁定之后最多持有锁10秒
boolean isLocked = lock.tryLock(100, 10, unit);
if (isLocked) {
// 业务逻辑
System.out.println("Lock acquired. Executing...");
} else {
System.out.println("Lock not available. Skipping...");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
System.out.println("Lock released");
}
}
}
}
在这个例子中,RedissonClient
是自动装配的,你可以通过getLock
方法获取一个RLock
实例。tryLock
方法尝试获取锁,如果在指定的等待时间内成功获取,则执行同步的业务逻辑代码。最后,确保在完成业务逻辑后释放锁。
评论已关闭