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进制数?

阅读 5.5k
6 个回答

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

如果是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;

    }

使用redisTemplate,需要定义一下相关序列化的方法,默认的序列化使用的JDK的序列化方法, 是以OBJECT为对象进行byte操作进行的,导致会出现非正常字段。
使用SpringRedisTemple,或者指定序列化方法,比如String,Jackson等等,不过要注意数据类型,比如value是int型的,需要转成string,再进行string的序列化

这种情况下,可以使用StringRedisTemplate,
如果你想取的内容为“this”,那就使用redisTemplate.opsForValue().get去取。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题