解决使用RedisTemplate时 key出现乱码问题
问题:
127.0.0.1:6379> keys *
1) "\xac\xed\x00\x05t\x00\x04user:xxxx"
2) "\xac\xed\x00\x05t\x00\x04user:list:xxxx"
所有的key前面都出现了乱码问题
解决方案
1 使用StringRedisTemplate
直接使用StringRedisTemplate
替换RedisTemplate
private StringRedisTemplate template;
这种方式需要存储对象的时候不太好处理,需要转类型
2 设置RedisTemplate序列化对象
注入一个RedisTemplate<String,Object>
对象,指定key为String
类型,并设置key的序列化对象为StringRedisSerializer
,值的序列化对象可以使用其他的(根据自己需求来),这里使用Jdk的JdkSerializationRedisSerializer
,注意所有序列化的对象,需要实现序列化接口(Serializable
),否则会抛异常.
其他的序列化对象还有Jackson的、FastJson的,等等,也可以自定义一个,只要实现RedisSerializer
接口即可,可以自己去尝试
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
RedisTemplate<String,Object> template = new RedisTemplate<>();
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setConnectionFactory(factory);
JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();
template.setValueSerializer(jdkSerializationRedisSerializer);
template.setHashValueSerializer(jdkSerializationRedisSerializer);
template.afterPropertiesSet();
return template;
}