项目最初的序列化方案用的是JDK序列化类,但保存到redis里会产生乱码不方便查看管理。
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
redisTemplate.setKeySerializer(new JdkSerializationRedisSerializer(Object.class.getClassLoader()));
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer(Object.class.getClassLoader()));
redisTemplate.setHashKeySerializer(new JdkSerializationRedisSerializer(Object.class.getClassLoader()));
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer(Object.class.getClassLoader()));
this.redisTemplate = redisTemplate;
}
经过上网查看是由于序列化类的问题,我们不用jdk的序列化方法,采用json的格式
public void setRedisTemplate(RedisTemplate<String, Object> redisTemplate) {
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
this.redisTemplate = redisTemplate;
}
注意问题:
采用上述序列化器时需保证实体类里的所有get方法都有属性字段,否则反序列话时会出现问题,若没有需要加@JsonIgnore注解,序列化时会进行忽略。