redis序列化的问题

207 阅读1分钟

昨天在开发过程中尝试使用redis的list结合xxljob来进行削峰填谷,

xxljob每1s调度一次方法,方法逻辑为redistemplate.leftPop()数据进行处理,这样每天的数据处理量大概为60 * 60 * 24,足够满足我的需求

一般我的redistemplate都是长这个样子的

@Configuration
public class RedisConfig {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        //创建一个json的序列化对象
        GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        //设置value的序列化方式json
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        //设置key序列化方式string
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //设置hash key序列化方式string
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        //设置hash value的序列化方式json
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }

}

当我使用redisTemplate.leftPush()数据的时候,再通过RDM查看的时候变成这个样子了,带有两个引号。

image.png

再后来我改用springboot自动注入的redis实例操作就可以了,就是换了string的序列化方式

@Autowired
private StringRedisTemplate redisTemplate;

当然不管哪种方式,你使用的时候都是一样的,不受影响,但如果你需要调试一些bug,需要通过可视化工具增加或者删除一些脏数据,可能就会遇到麻烦了,大家一定要从这些细节去提高自己的开发效率。