# 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. 常见问题总结

  1. 配置写了但是不生效:检查是不是混用了 spring.redis 和 spring.data.redis 两套前缀;
  2. 并发高时报无法获取连接:调高 max-active,同时检查业务代码有没有长时间占用连接;
  3. 序列化乱码:默认 Jdk 序列化,生产一般自定义 RedisConfig 改成 Jackson 序列化;
  4. 线上 Redis 一定要设置密码,不要直接裸奔公网。

参考资料

完整的 Redis 序列化配置类以及线上调优方案,可以查看这份整理文档:lrpab.com/

小结

SpringBoot3 + Lettuce 这套方案是现在主流选择,配置简单、稳定性比 Jedis 更好。缓存使用的时候一定要做好缓存淘汰、缓存击穿、雪崩防护,不要只依赖框架自带注解。www.lrpab.com/

posted on 2026-10-28 23:41  会落叶的小黑  阅读(9)  评论(0)    收藏  举报