1. Redis与Redisson集成实战:从入门到避坑指南
作为Java开发者,当我们需要在分布式系统中实现缓存、分布式锁或消息队列时,Redis几乎是首选方案。而Redisson作为Redis官方推荐的Java客户端,提供了比原生Jedis更丰富的分布式对象和服务。但在实际集成过程中,从环境配置到生产部署,每个环节都可能藏着意想不到的"坑"。
我在最近的一个电商秒杀项目中,就经历了从Redisson 3.16升级到3.23的全过程,期间遇到了连接泄漏、锁自动释放、序列化异常等问题。本文将分享这些实战经验,特别是那些官方文档没有明确说明的细节。无论你是第一次集成Redisson,还是正在排查Redisson的疑难杂症,这些经验都能帮你少走弯路。
2. 环境准备与基础配置
2.1 依赖管理的关键选择
在Spring Boot项目中引入Redisson时,第一个抉择就是:该用redisson-spring-boot-starter还是手动配置?官方starter确实方便,但有些项目可能需要更灵活的配置控制。我的建议是:
- 简单项目直接用starter:
xml复制<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.23.5</version>
</dependency>
- 复杂项目建议手动管理依赖:
xml复制<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.23.5</version>
</dependency>
<!-- 根据需要添加其它模块如redisson-spring-data -->
重要提示:不要同时引入spring-boot-starter-data-redis和redisson-spring-boot-starter,这会导致配置冲突。我曾因此浪费半天时间排查为什么@Cacheable注解不生效。
2.2 配置文件的那些"潜规则"
Redisson支持多种配置方式,但每种方式都有其适用场景:
- application.yml内联配置 - 适合简单开发环境
yaml复制spring:
redis:
host: 127.0.0.1
port: 6379
# 生产环境一定要配置密码!
password: your_strong_password
timeout: 3000
database: 0
- 独立redisson.yaml文件 - 推荐用于生产环境
yaml复制singleServerConfig:
address: "redis://127.0.0.1:6379"
password: "your_strong_password"
idleConnectionTimeout: 10000
connectTimeout: 10000
timeout: 3000
retryAttempts: 3
retryInterval: 1500
- 编程式配置 - 适合需要动态配置的场景
java复制@Bean
public RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer()
.setAddress("redis://127.0.0.1:6379")
.setPassword("your_strong_password")
.setPingConnectionInterval(1000);
return Redisson.create(config);
}
踩坑记录:在Kubernetes环境中,Redis可能部署为StatefulSet,这时address应该配置为"redis:/
