redis序列化兼容
問題:一個工具包,含有redis的工具(redisTemplate)。在接入其他項目時,別的項目需要使用。但是各個項目的序列化方式又各有不同。這個如何解決。
解決方案
- 通過配置多redisTemplate,通過注入不同的redisTemplate。
- 統一設置序列化方式
- 偶然發現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的序列化,兼容性太差。