Spring Boot集成Redis缓存管理核心是三步:连上Redis、配好序列化、用对注解;需引入spring-boot-starter-data-redis、spring-boot-starter-cache和commons-pool2依赖,配置application.yml连接参数与Lettuce连接池,并自定义RedisTemplate使用StringRedisSerializer和GenericJackson2JsonRedisSerializer序列化器,主类加@EnableCaching后方可使用@Cacheable等注解。

在 Spring Boot 中集成 Redis 实现缓存管理,核心是三步:连上 Redis、配好序列化、用对注解。不是加个依赖就能跑通,关键细节没处理好,缓存值会变乱码、过期不生效、甚至锁不住线程。
引入依赖与连接池配置
只加 spring-boot-starter-data-redis 不够,必须显式引入连接池,否则默认无连接池,高并发下容易连接耗尽或超时失败:
-
spring-boot-starter-data-redis(提供自动配置和 RedisTemplate) -
spring-boot-starter-cache(启用 @Cacheable 等声明式缓存注解) -
commons-pool2(Lettuce 连接池必需,Spring Boot 2.7+ 不再自动拉取)
如果用 Maven,确保这三项都在 pom.xml 里;Gradle 同理补全对应 implementation。
application.yml 基础连接配置
配置要写全,尤其超时和连接池参数,避免本地能跑、测试环境就报 timeout:
立即学习“Java免费学习笔记(深入)”;
-
host/port/password/database按实际填写,密码为空可省略 -
timeout: 3000ms控制连接、读写整体超时(不是单个命令) - Lettuce 连接池建议配:
max-active: 20、max-idle: 10、min-idle: 2、max-wait: -1(无限等待,适合稳定业务)
序列化方案必须重写
默认 RedisTemplate 使用 JDK 序列化,value 存进去是一串 \xAC\xED\x00\x05t...,Redis 可视化工具里完全不可读,调试困难,也不利于跨语言协作:
- key 和 hashKey 统一用
StringRedisSerializer(保证 key 可读) - value 和 hashValue 推荐用
GenericJackson2JsonRedisSerializer(兼容 null、支持泛型、JSON 格式易排查) - 不要用 Fastjson 序列化器(已知存在反序列化安全风险,且 Spring 官方不维护)
这个配置需通过自定义 @Bean RedisTemplate<String, Object> 注入,不能只靠 application.yml。
开启缓存并使用 @Cacheable
主启动类加 @EnableCaching 是前提,否则所有缓存注解静默失效:
-
@Cacheable(value = "users", key = "#id"):方法返回值自动缓存,key 支持 SpEL 表达式 -
@CachePut用于更新后刷新缓存(如修改用户信息),不跳过原方法 -
@CacheEvict删除缓存,支持allEntries = true清空整个 cache 名称空间
注意:被代理的方法必须是 public,且调用必须走 Spring 代理(即不能 this.getUserById(1L) 内部调用)。


















