redistemplate 设值的问题

redisTemplate.opsForValue().set("one", "1");

上面运行后,在 redis 看的结果

127.0.0.1:6379> get one
"xacxedx00x05tx00x011"

redisTemplate.opsForValue().set("one", "this");
127.0.0.1:6379> get one
"xacxedx00x05tx00x04this"

这是怎么回事啊?

怎样去除那些斜杠的16进制数?

墨色风雨
浏览 2001回答 6
6回答

暮色呼如

重写redis的序列化方法比如改成JSON的

梦里花落0921

如果是String,建议改用StringRedisTemplate

繁星淼淼

@Bean @SuppressWarnings({"rawtypes","unchecked"}) public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>(); template.setConnectionFactory(redisConnectionFactory); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om = new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(jackson2JsonRedisSerializer); return template; }

12345678_0001

使用redisTemplate,需要定义一下相关序列化的方法,默认的序列化使用的JDK的序列化方法, 是以OBJECT为对象进行byte操作进行的,导致会出现非正常字段。使用SpringRedisTemple,或者指定序列化方法,比如String,Jackson等等,不过要注意数据类型,比如value是int型的,需要转成string,再进行string的序列化
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java