springboot整合redisson 单机
时间: 2025-01-04 21:26:49 浏览: 5
### Spring Boot 整合 Redisson 实现单机模式下分布式锁
#### 配置依赖项
为了在Spring Boot项目中使用Redisson,首先需要引入必要的Maven或Gradle依赖。对于Maven构建工具而言,在`pom.xml`文件内添加如下依赖:
```xml
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.20.0</version>
</dependency>
```
这一步骤确保了应用能够访问到Redisson所提供的API接口以及自动配置支持。
#### 创建Redisson客户端实例
接着定义一个用于连接至本地运行的Redis服务器(即单节点部署方式)的Bean对象。可以通过创建名为`RedissonClient`类型的bean完成此操作,具体做法是在项目的配置类里编写相应的方法并标注上`@Configuration`注解以便让框架识别它是一个配置组件[^1]。
```java
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RedissonConfig {
@Bean(destroyMethod = "shutdown")
public RedissonClient redissonClient() {
Config config = new Config();
// 单机版地址设置为localhost,默认端口6379
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
return Redisson.create(config);
}
}
```
#### 使用分布式锁保护业务逻辑
当完成了以上准备工作之后就可以着手于实际的应用场景开发上了。这里给出一段简单的例子展示怎样利用Redisson提供的RLock接口来加锁从而保障并发情况下数据的一致性和安全性[^3]。
假设有一个电商系统的商品库存管理模块,其中涉及到减少某个特定ID对应的商品数量的操作,为了避免多个请求同时修改相同记录造成的数据不一致问题可以采用分布式锁来进行同步控制:
```java
@Service
@Slf4j
public class StockService {
private final RedissonClient redissonClient;
public StockService(RedissonClient redissonClient){
this.redissonClient = redissonClient;
}
/**
* 减少指定id的产品库存量.
*/
public void decreaseStock(Long productId, Integer quantity) throws InterruptedException{
String lockKey = "stock_lock:" + productId.toString();
RLock lock = redissonClient.getLock(lockKey);
try {
boolean isLocked = lock.tryLock(10, 5, TimeUnit.SECONDS); // 尝试获取锁最多等待十秒超时时间五秒
if (!isLocked){
throw new RuntimeException("无法获得锁定!");
}
log.info("{}获得了{}号产品的库存更新权限", Thread.currentThread().getName(), productId);
// 执行具体的扣减库存业务处理...
} finally {
if (lock.isHeldByCurrentThread()){
lock.unlock(); // 解除当前线程持有的锁
log.info("{}释放了{}号产品对应的库存更新权限", Thread.currentThread().getName(), productId);
}
}
}
}
```
该案例展示了如何基于Redisson库实现在单一机器上的分布式锁机制,即使只有一台服务提供者也依然能享受到其带来的便利之处[^2]。
阅读全文