# SpringBoot3整合Redis实现缓存,Lettuce连接池配置踩坑记录
SpringBoot3 已经默认使用 Lettuce 作为 Redis 客户端,不再推荐 Jedis。很多同学直接复制旧版本的配置,上线之后出现连接超时、连接泄露、并发卡顿等问题。本文记录一套可直接上测试环境的整合方案,同时把踩过的坑一并说明。
## 1. 引入Maven依赖
pom.xml 新增下面两个依赖,一个是redis starter,一个是连接池依赖(Lettuce底层依赖commons-pool2)
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2. application.yml 完整配置
SpringBoot3 配置前缀是 spring.data.redis,老版本 spring.redis 已经废弃,这点是高频踩坑点。
spring:
data:
redis:
host: 127.0.0.1
port: 6379
password: 123456
database: 0
lettuce:
pool:
max-active: 8
max-idle: 8
min-idle: 2
max-wait: 3000ms
参数简单说明:
- max-active:连接池最大连接数
- max-idle:最大空闲连接
- min-idle:最小空闲连接,预热保留
- max-wait:获取连接的最大等待时间,超时抛异常
3. 开启缓存注解 @EnableCaching
在启动类加上注解,就可以直接使用 @Cacheable、@CachePut、@CacheEvict 做声明式缓存。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cache.annotation.EnableCaching;
@SpringBootApplication
@EnableCaching
public class RedisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(RedisDemoApplication.class, args);
}
}
4. 简单测试 Controller
import org.springframework.cache.annotation.Cacheable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/demo")
public class TestController {
@GetMapping("/info")
@Cacheable(value = "userInfo",key = "#id")
public String getInfo(Long id){
System.out.println("走数据库查询,id="+id);
return "数据内容:"+id;
}
}
第一次访问会打印日志(查库),第二次直接走 Redis 缓存,不会打印日志。
5. 常见问题总结
- 配置写了但是不生效:检查是不是混用了 spring.redis 和 spring.data.redis 两套前缀;
- 并发高时报无法获取连接:调高 max-active,同时检查业务代码有没有长时间占用连接;
- 序列化乱码:默认 Jdk 序列化,生产一般自定义 RedisConfig 改成 Jackson 序列化;
- 线上 Redis 一定要设置密码,不要直接裸奔公网。
参考资料
完整的 Redis 序列化配置类以及线上调优方案,可以查看这份整理文档:lrpab.com/
小结
SpringBoot3 + Lettuce 这套方案是现在主流选择,配置简单、稳定性比 Jedis 更好。缓存使用的时候一定要做好缓存淘汰、缓存击穿、雪崩防护,不要只依赖框架自带注解。www.lrpab.com/
浙公网安备 33010602011771号