springboot redis乱码
时间: 2025-02-18 07:20:26 浏览: 48
### 解决Spring Boot与Redis集成时出现的中文乱码问题
当在Spring Boot项目中集成了Redis之后,可能会遇到存储的数据存在乱码的情况。这主要是因为`RedisTemplate`默认采用的是JDK序列化器,并且其编码设置为ISO-8859-1,而在Linux/Unix系统上,默认字符集通常是UTF-8[^2]。
为了处理这一情况并确保能够正确保存和读取带有特殊字符(如汉字)的信息,可以调整`RedisTemplate`的相关配置来改变序列化方式以及指定合适的字符串编码格式。具体做法如下:
#### 修改RedisTemplate配置
通过自定义`RedisTemplate<String, Object>`实例,在其中指定了键值对都使用`StringRedisSerializer`作为序列化工具类,这样就能保证所有的key/value都会被转换成字符串形式再进行传输,从而避免由于不同平台间编码差异带来的潜在风险。
```java
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer<Object> jacksonSer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jacksonSer.setObjectMapper(om);
StringRedisSerializer stringSer = new StringRedisSerializer();
// 设置 key 和 hashKey 的序列化方式为 String 类型
template.setKeySerializer(stringSer);
template.setHashKeySerializer(stringSer);
// 设置 value 和 hashValue 序列化方式为 JSON 方式
template.setValueSerializer(jacksonSer);
template.setHashValueSerializer(jacksonSer);
template.afterPropertiesSet();
return template;
}
}
```
上述代码片段展示了如何创建一个新的`RedisTemplate`对象并将之注册成为Spring容器中的bean。这里选择了Jackson库来进行JSON序列化操作,同时也设置了所有涉及字符串的地方均采用`StringRedisSerializer`以统一编码标准[^3]。
另外需要注意的一点是在实际开发过程中可能还需要根据业务需求进一步优化这些参数的选择;比如对于某些特定类型的value可以直接选用更高效的二进制安全序列化方案等等。
阅读全文
相关推荐


















