数据存储到redis中,从代码中也能从redis中读取到,但是从cli客户端中不能查询到数据,通过scan后发现存入的数据前边都多了一串特殊字符
存储数据的时候我们使用的是redis的默认的序列化方式(JDK序列化方式),要想读出来数据,需要使用相同的序列化方式,这就是为什么代码中可以读取到数据,因为代码中的redis使用的还是jdk的序列化方式,但是cli客户端就不一样了,我们使用cli客户端读取数据,使用没有进行序列化的key,和使用jdk序列化之后的key是不一样的,所以查询不到数据
总结下来我们在使用redis的时候还是要定一个规范,redis的key可以统一的使用string的序列化方式,就不会存在上边的问题,还有就是使用jdk的序列化的方式,很明显,key变长了,这样存储也会增加内存的使用
@Configuration public class RedisConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory factory){ RedisTemplate template = new RedisTemplate <>(); template.setConnectionFactory(factory); //替换默认序列化的方式 //1.设置key的序列化方式为string StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); //1.1设置key的序列化方式为string template.setKeySerializer(stringRedisSerializer); //1.2设置hash key的序列化方式为string template.setHashKeySerializer(stringRedisSerializer); //2.设置value的序列化方式 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); //2.1设置value的序列化方式为string template.setValueSerializer(stringRedisSerializer); //2.2设置hash value的序列化方式为json template.setHashValueSerializer(jackson2JsonRedisSerializer); template.afterPropertiesSet(); return template; } }