自定義redisTemplate
阿新 • • 發佈:2021-01-05
技術標籤:redis
在RedisAutoConfiguration中的原生redisTemplate的型別為<Object,Object>
但是在實際的開發中,我們通常採用<String,Object>的格式
@ConditionalOnMissingBean(name = “redisTemplate”) 這個註解表示 自定義redisTemplate的名字為redisTemplate時 預設的redisTemplate被覆蓋
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass(RedisOperations. class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
@ConditionalOnSingleCandidate(RedisConnectionFactory. class)
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
自定義的redisTemplate
自定義的redisTemplate不僅要修改RedisTemplate的格式,還要設定序列化方式
在原始碼中預設使用JdkSerializationRedisSerializer的序列化方式,
需要改變序列化方式
- key的型別為String,使用的序列化方式為StringRedisSerializer
- value的型別為Object,使用的序列化方式為Jackson2JsonRedisSerializer
@Configuration
public class RedisConfig {
//自定義RedisTemplate
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
//為了簡化開發 一般自定義template<String,Object>
RedisTemplate<String, Object> template = new RedisTemplate<>();
//new 一個Jackson的序列化物件
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
template.setConnectionFactory(redisConnectionFactory);
//Json序列化設定
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance ,ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
serializer.setObjectMapper(om);
//String的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key採用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
//hash的key也採用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
//value的序列化採用jackson
template.setValueSerializer(serializer);
//hash的value也採用jackson的序列化
template.setHashValueSerializer(serializer);
return template;
}
}