必须使用Lettuce客户端并配置JSON序列化:引入spring-boot-starter-data-redis和spring-boot-starter-cache依赖,application.yml中正确设置Redis连接与Lettuce连接池参数,通过RedisConfig类六步配置RedisTemplate的Key/Value/Hash键值序列化器并调用afterPropertiesSet(),主类加@EnableCaching,Service方法用@Cacheable注解且key须为SpEL表达式。

要在Spring Boot 3.5项目中用缓存抽象对接Redis实现查询加速,必须绕过默认的JDK序列化乱码陷阱,且不能依赖已废弃的Jedis客户端——Lettuce是唯一支持Redis 8.0异步IO模型的合法选择。
引入正确依赖
在pom.xml中添加spring-boot-starter-data-redis和spring-boot-starter-cache,【务必删除所有jedis相关依赖】。Spring Boot 3.5已完全移除Jedis自动配置支持,残留jedis包会导致启动失败或连接静默丢弃。
确认Lettuce版本不低于6.3.0:检查mvn dependency:tree输出中lettuce-core是否为6.3.x或更高。
配置Redis连接参数
application.yml中设置:
spring:
redis:
host: localhost
port: 6379
password: your_password
timeout: 2000
lettuce:
pool:
max-active: 20
max-idle: 10
min-idle: 0
【timeout单位是毫秒,不是秒】。旧配置如timeout: 2s会触发Lettuce连接超时异常,且不报明确错误。
替换默认序列化器
创建RedisConfig类,注入自定义RedisTemplate:
第一步:声明@Bean方法返回RedisTemplate
第二步:调用template.setKeySerializer(new StringRedisSerializer());
第三步:调用template.setValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
第四步:调用template.setHashKeySerializer(new StringRedisSerializer());
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
第五步:调用template.setHashValueSerializer(new Jackson2JsonRedisSerializer(Object.class));
第六步:执行template.afterPropertiesSet();
这六步缺一不可。漏掉hash键值序列化器,使用HashOperations操作时会出现乱码或空指针;不调用afterPropertiesSet,序列化器不会生效。
启用缓存并标注方法
在主启动类上加@EnableCaching注解;
在Service方法上加@Cacheable注解,例如:
@Cacheable(value = "user", key = "#id")
public User findById(Long id) { ... }
value指定缓存名,key必须用SpEL表达式,【#id不能写成id或' + id + '】,否则缓存键生成失败,每次请求都走数据库。
验证缓存是否生效
方法一:启动应用后访问一次接口,观察Redis CLI中执行keys *是否出现user::1001这类键;
方法二:在@Cacheable方法内加log.info("DB queried"),第二次调用时不打印该日志即表示命中缓存;
方法三:用Redis Desktop Manager连接,直接查看对应key的value是否为合法JSON字符串——如果不是,说明序列化器未生效。

















