一开始想着RedisTemplate的默认的序列化方式用redis客户端查询效果不友好
默认序列化方式存入key为test1
于是将序列化方式更改为了Jackson2JsonRedisSerializer

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        // 使用Jackson2JsonRedisSerialize 替换默认序列化
        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);

        template.setConnectionFactory(factory);
        // key序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        // key hash序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        // value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        // value hash序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

通过RedisTemplate取出数据正常,但是通过客户端查看数据,格式发生了变化
java代码打印客户端查看
在此基础上发布消息对象如果是字符串

redisTemplate.convertAndSend(RiskConstants.PublishType.RISK_DISPOSAL_ACTION, resultJson.toString());

则订阅消息格式收到是
在这里插入图片描述
如果发布消息对象是对象,并且对象里面存在复杂对象

redisTemplate.convertAndSend(RiskConstants.PublishType.RISK_DISPOSAL_ACTION, resultJson);

则订阅消息收到是
在这里插入图片描述
收到的也是标准json,但是对于订阅端来说十分不友好
因此序列化方式采用StringRedisSerializer

        template.setConnectionFactory(factory);
        // key序列化方式
        template.setKeySerializer(new StringRedisSerializer());
        // key hash序列化方式
        template.setHashKeySerializer(new StringRedisSerializer());
        // value序列化
        template.setValueSerializer(new StringRedisSerializer());
        // value hash序列化
        template.setHashValueSerializer(new StringRedisSerializer());

发布消息对象传入字符串

redisTemplate.convertAndSend(RiskConstants.PublishType.RISK_DISPOSAL_ACTION, resultJson.toString());

则订阅消息格式收到是
在这里插入图片描述
可直接转为标准json,完美~

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐