redis的key与value乱码问题
- key乱码问题
因redis默认使用JdkSerializationRedisSerializer来进行序列化,造成key是乱码,如下: - 解决key乱码
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
//创建模板类
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
RedisSerializer stringSerializer = new StringRedisSerializer();
template.setKeySerializer(stringSerializer);
template.setValueSerializer(stringSerializer);
template.setHashKeySerializer(stringSerializer);
template.setHashValueSerializer(stringSerializer);
return template;
}
-
但是不建议使用此方法,因为这种方式key与value都只能存储String类型的数据
-
修改后的代码
@Configuration
public class RedisConfig {
@Bean(name = "springSessionDefaultRedisSerializer")
public GenericJackson2JsonRedisSerializer getGenericJackson2JsonRedisSerializer()
{
return new GenericJackson2JsonRedisSerializer();
}
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory factory) {
//创建模板类
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
// 配置默认的序列化器
template.setDefaultSerializer(getGenericJackson2JsonRedisSerializer());
//redis默认使用JdkSerializationRedisSerializer来进行序列化,造成key是乱码,使用下列进行序列化,修复乱码
//解决key乱码问题
RedisSerializer<String> stringSerializer = new StringRedisSerializer();
template.setKeySerializer(stringSerializer);
template.setHashKeySerializer(stringSerializer);
//value不建议使用stringSerializer,因为使用后只能存String类型的值,其他类型不支持
/**
* template.setValueSerializer(stringSerializer);
* template.setHashValueSerializer(stringSerializer);
*/
return template;
}
- 修改后的方法对于日期字段好像还是有问题,因为已满足需求,所以没尝试了