- 起因
在工作中使用redis存储字符串,在redis管理工具中查看key和value时发现乱码。
1.1乱码图
- 分析问题
2.1 \xxx 是转义字符或二进制。
对于我英文的key,就是乱码,果断百度。
- 定位问题
找到问题 redisTemplate 里直接使用jdk的序列化,
而jdk序列化使用ISO-8859-1字符集,导致key显示乱码。
3.1 RedisTemplate类
3.2 JdkSerializationRedisSerializer类
3.3 SerializingConverter
3.4 DefaultSerializer
具体就是输出流中字符集为ISO-8859-1,导致查看key时key为乱码。
- 解决方案
4.1 重新指定字符串序列化对象。
package com.dhcc.ipaas.system.config;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @ClassName RedisTemplateConfig
* @Description
* @Author xxx
* @Date 2023/2/211:17
* Version
*/
@Component
public class RedisTemplateConfig {
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Bean
public RedisTemplate<String, Object> stringSerializerRedisTemplate() {
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
return redisTemplate;
}
}
4.2 使用StringRedisTemplate替换RedisTemplate类型
4.2.1 StringRedisTemplate
4.2.2 RedisSerializer 中指定字符集为UTF-8
- 测试验证
本文采用重新指定字符串序列化。
5.1验证图
- 总结
遇到问题,定位到问题就已经解决50%了,剩下的就得静下心来,扒一扒问题了。
- 感谢前人
参考文章地址
https://blog.csdn.net/weixin_42408447/article/details/120178004
前人种树后人乘凉,感谢。