基于 Redis 的分布式锁 Spring Boot 集成 Redisson 使用分布式锁确保对共享资源的互斥访问
在Spring Boot项目中,可以使用Redisson提供的分布式锁来确保对共享资源的同步访问。以下是一个使用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
- 在Spring Boot应用中使用Redisson提供的分布式锁:
import org.redisson.api.RedissonClient;
import org.redisson.api.RLock;
@Service
public class DistributedLockService {
@Autowired
private RedissonClient redissonClient;
public void lockAndExecute(String lockKey, Runnable runnable) {
RLock lock = redissonClient.getLock(lockKey);
try {
// 尝试获取锁,最多等待100秒,锁在10秒后自动释放
boolean isLocked = lock.tryLock(100, 10, TimeUnit.SECONDS);
if (isLocked) {
runnable.run();
} else {
// 如果未能获取锁,执行其他逻辑或者直接返回
System.out.println("无法获取锁,操作被跳过。");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock();
}
}
}
}
在这个示例中,DistributedLockService
提供了一个方法lockAndExecute
,它尝试获取一个分布式锁,并在获取锁后执行传入的Runnable
任务。如果无法在指定时间内获取锁,则会执行其他逻辑或直接返回。最后,在finally块中释放锁,确保即使发生异常也能正确释放锁。
评论已关闭