redistemplate 序列化配置核心是 key 用 stringredisserializer、value 用 genericjackson2jsonredisserializer,并需同时设置 keyserializer、hashkeyserializer、valueserializer 和 hashvalueserializer,避免默认 jdk 序列化导致乱码和类型丢失。

直接配置 RedisTemplate 的 Key 和 Value 序列化器,核心就两点:Key 用 StringRedisSerializer,Value 用 GenericJackson2JsonRedisSerializer(或 Jackson2JsonRedisSerializer),不能只配一个而忽略另一个。
Key 必须用 StringRedisSerializer
Redis 的 Key 天然就是字符串,用 JDK 默认序列化会导致 Key 前面出现乱码前缀(比如 \xAC\xED\x00\x05t\x00\x03xxx),不仅在 redis-cli 或图形化工具里不可读,还会让其他语言客户端完全无法识别。StringRedisSerializer 把 Key 当纯字符串处理,安全、简洁、跨语言兼容。
- 推荐写法:
template.setKeySerializer(RedisSerializer.string())或new StringRedisSerializer() - 别漏掉 Hash 类型的 Key:
template.setHashKeySerializer(new StringRedisSerializer())
Value 推荐用 GenericJackson2JsonRedisSerializer
它能自动记录类型信息(比如存 List
- 基础配置:
template.setValueSerializer(new GenericJackson2JsonRedisSerializer()) - 如果存的是具体类型(如 User),可指定:
new GenericJackson2JsonRedisSerializer(User.class) - 同样要配 Hash 的 Value:
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer())
别踩默认序列化的坑
Spring Boot 自动装配的 RedisTemplate 默认全用 JdkSerializationRedisSerializer。这意味着 Key 和 Value 都是二进制流,Redis 里全是十六进制乱码,调试困难,扩容或联调时极易出错。
- 错误示范:只设 valueSerializer,key 留默认 → Key 不可读、不可查
- 错误示范:用
Jackson2JsonRedisSerializer(Object.class)但没配 ObjectMapper 的 type info → 取出来是 LinkedHashMap,不是原对象 - 正确姿势:显式设置 keySerializer + valueSerializer + hashKeySerializer + hashValueSerializer
完整配置示例(Java Config)
放在 @Configuration 类里,确保 Bean 创建时就完成序列化器绑定:
@Bean
public RedisTemplate<string object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<string object> template = new RedisTemplate();
template.setConnectionFactory(factory);
// Key 全部走字符串
template.setKeySerializer(RedisSerializer.string());
template.setHashKeySerializer(RedisSerializer.string());
// Value 全部走带类型信息的 JSON
GenericJackson2JsonRedisSerializer jsonSerializer
= new GenericJackson2JsonRedisSerializer();
template.setValueSerializer(jsonSerializer);
template.setHashValueSerializer(jsonSerializer);
template.afterPropertiesSet(); // 触发初始化
return template;
}</string></string>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











