RedisTemplate存储乱码问题
前言
这个东西以前也是经常处理,但是懒得记,今天弄自己网盘项目的登录用Redis也遇到这个,记录下自己常用的解决方式
问题
比如像下面,存值存一个字符串类型
出现这个问题的原因是两边序列化不一致。
解决方式
配置RedisTemplate的序列化方式
- 如果key和value都是存字符串类型则设置序列化为StringRedisSerializer
1
2
3RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);- 如果key参数放字符串,value放对象
1
2redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());- 也可以在bean里配置
1
2
3
4
5
6
7
8
9
10
11
12
public class RedisConfig {
private RedisTemplate redisTemplate;
public RedisTemplate redisTemplateInit() {
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
return redisTemplate;
}
}除了配置序列化方式之外,如果是都存字符串可以在注入RedisTemplate时直接加上泛型
1
2
RedisTemplate<String,String> redisTemplate;
总结
自己一般是直接加泛型解决乱码问题,即使存值类型是对象含义也是转为json字符串来存。所以基本上key,value都是字符串类型。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 木瓜煲鸡脚's blog!
评论