中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~RedisTemplate三種(zhong)序列化方式

RedisTemplate默認使用二進制hex的方式進行持久化,它對象的值存儲到redis里,當然,你的對象需要先實現java.io.Serializable接(jie)口,這(zhe)種方式兼容性(xing)好,速(su)度(du)快,存儲(chu)空間小;缺點就是沒有可讀(du)性(xing),所(suo)以就有了json的序列(lie)化方式,下(xia)面總(zong)結一(yi)下(xia)。

一 JdkSerializationRedisSerializer二進制流的方式

@Test
    public void hex() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        //二進制序列化,實體類需要實現Serializable接口
        JdkSerializationRedisSerializer jdkSerializationRedisSerializer = new JdkSerializationRedisSerializer();
        //序列化
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        template.setValueSerializer(jdkSerializationRedisSerializer);
        template.setHashValueSerializer(jdkSerializationRedisSerializer);
        template.afterPropertiesSet();

        extracted(template, "redis_test111");
        User user = (User) template.opsForValue().get("redis_test111");
    }

二 Jackson2JsonRedisSerializer純json字符串

 @Test
    public void jsonStr() throws IOException {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer =
                new Jackson2JsonRedisSerializer<>(Object.class);
        //序列化
        jackson2JsonRedisSerializer.setObjectMapper(new ObjectMapper());
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        template.setKeySerializer(stringRedisSerializer);
        template.setHashKeySerializer(stringRedisSerializer);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        extracted(template, "redis_test11");
        JsonParser jsonParser = mapper.getFactory().createParser(mapper.writeValueAsBytes(template.opsForValue().get("redis_tesqt")));
        User jsonNode = jsonParser.readValueAs(User.class);
        log.info("user={}", jsonNode);
    }

三 Jackson2JsonRedisSerializer帶有java類型的方式

RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        // 日期序列化處理
        om.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        om.registerModule(new Jdk8Module())
                .registerModule(new JavaTimeModule())
                .registerModule(new ParameterNamesModule());

        //存儲java的類型,方便反序列化,沒有這行,將存儲為純json字符串
        om.activateDefaultTyping(
                LaissezFaireSubTypeValidator.instance,
                ObjectMapper.DefaultTyping.NON_FINAL,
                JsonTypeInfo.As.WRAPPER_ARRAY);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        // hash的key也采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        // value序列化方式采用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);
        // hash的value序列化方式采用jackson
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        extracted(template, "redis_test1");
        User user = (User) template.opsForValue().get("redis_test");
        log.info("user={}", user);

綜上所(suo)述,我(wo)認為第三種json對象的(de)方式是比較(jiao)好的(de)處理方式,在序(xu)(xu)列化和反(fan)序(xu)(xu)列化,及可讀性(xing)上都表現不錯。

posted @ 2022-09-16 17:20  張占嶺  閱讀(2262)  評論(0)    收藏  舉報