springboot 整合redisson集群分布式锁
时间: 2025-06-17 10:51:58 浏览: 20
### Spring Boot整合Redisson实现分布式锁的集群配置示例
在Spring Boot项目中,通过Redisson可以方便地实现分布式锁功能。以下是一个完整的集群配置示例,包括依赖引入、配置文件设置以及代码实现。
#### 1. 引入Redisson依赖
确保使用的是3.18及以上版本以避免内存泄漏问题[^3]。在`pom.xml`中添加以下依赖:
```xml
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.18.1</version>
</dependency>
```
#### 2. 配置Redis集群信息
在`application.yml`或`application.properties`中配置Redis集群地址和相关参数。以下是`application.yml`的示例配置:
```yaml
spring:
redis:
cluster:
nodes:
- 192.168.1.101:7000
- 192.168.1.102:7001
- 192.168.1.103:7002
max-redirects: 3
timeout: 3000
password: your_redis_password
```
#### 3. Redisson配置类
创建一个配置类用于初始化RedissonClient。通过`RedissonConfig`对象定义集群模式下的连接信息。
```java
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.ClusterServersConfig;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedissonConfig {
@Bean
public RedissonClient redissonClient() {
Config config = new Config();
ClusterServersConfig clusterServersConfig = config.useClusterServers()
.addNodeAddress("redis://192.168.1.101:7000")
.addNodeAddress("redis://192.168.1.102:7001")
.addNodeAddress("redis://192.168.1.103:7002")
.setPassword("your_redis_password") // 如果有密码
.setTimeout(3000); // 设置超时时间
return Redisson.create(config);
}
}
```
#### 4. 分布式锁代码实现
以下是一个简单的分布式锁示例,展示如何在业务逻辑中使用Redisson的分布式锁。
```java
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
@Service
public class DistributedLockService {
@Autowired
private RedissonClient redissonClient;
public void executeWithLock(String lockName) {
RLock lock = redissonClient.getLock(lockName);
try {
boolean isLocked = lock.tryLock(10, 30, TimeUnit.SECONDS); // 尝试获取锁,等待10秒,持有30秒
if (isLocked) {
System.out.println("成功获取锁:" + lockName);
// 执行业务逻辑
Thread.sleep(5000); // 模拟业务处理
System.out.println("完成业务处理");
} else {
System.out.println("未能获取锁:" + lockName);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.err.println("线程被中断:" + e.getMessage());
} finally {
if (lock.isHeldByCurrentThread()) {
lock.unlock(); // 释放锁
System.out.println("释放锁:" + lockName);
}
}
}
}
```
#### 5. 测试分布式锁功能
可以通过多线程或多实例的方式测试分布式锁的效果。例如,在多个服务实例中调用`executeWithLock`方法,观察是否能够正确地控制并发访问。
---
### 注意事项
- 确保Redis集群已正确部署并运行。
- 在高并发场景下,合理设置锁的等待时间和持有时间,避免死锁或资源浪费。
- 使用集群模式时,确保所有节点的网络连通性良好,并配置适当的超时时间[^1]。
---
阅读全文
相关推荐



















