1. 程式人生 > 其它 >自定義redisTemplate

自定義redisTemplate

技術標籤: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;
    }

}