redis序列化兼容问题

redis序列化兼容

问题:一个工具包,含有redis的工具(redisTemplate)。在接入其他项目时,别的项目需要使用。但是各个项目的序列化方式又各有不同。这个如何解决。

解决方案

  1. 通过配置多redisTemplate,通过注入不同的redisTemplate。
  2. 统一设置序列化方式
  3. 偶然发现redisTemplate还存在许多继承的子类,里面的是有集成序列化方式的,可以直接使用它的子类。这种方式最好,如StringRedisTemplate
public class StringRedisTemplate extends RedisTemplate<String, String> {
    public StringRedisTemplate() {
        this.setKeySerializer(RedisSerializer.string());
        this.setValueSerializer(RedisSerializer.string());
        this.setHashKeySerializer(RedisSerializer.string());
        this.setHashValueSerializer(RedisSerializer.string());
    }

    public StringRedisTemplate(RedisConnectionFactory connectionFactory) {
        this();
        this.setConnectionFactory(connectionFactory);
        this.afterPropertiesSet();
    }

    protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) {
        return new DefaultStringRedisConnection(connection);
    }
}

思考

作为工具包提供的redisTemplate应该,以自己项目为基准。自己定义完整可用的序列化方式。不能根据其他项目去修改调整。个人见解:最好不要使用json的序列化,兼容性太差。

你可能感兴趣的:(java)