> 文档中心 > SpringBoot集成 Redis,默认连接工厂为什么是LettuceConnectionFactory?

SpringBoot集成 Redis,默认连接工厂为什么是LettuceConnectionFactory?

今天搭建了一个 SpringBoot 集成 Redis的一个demo,
自定义 redisTemplate 的Bean对象发现了没有看到注入 RedisConnectionFactory,分别在其实现类 JedisConnectionFactory 跟 LettuceConnectionFactory 找出了自己的疑问–

@Configurationpublic class RedisConfig {    private final StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();    private final FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer<>(Object.class);    /     * 设置Redis序列化方式,默认使用的JDKSerializer的序列化方式,效率低,这里我们使用 FastJsonRedisSerializer     * @param redisConnectionFactory     * @return     */    @Bean    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); // key序列化 redisTemplate.setKeySerializer(stringRedisSerializer); // value序列化 redisTemplate.setValueSerializer(fastJsonRedisSerializer); // Hash key序列化 redisTemplate.setHashKeySerializer(stringRedisSerializer); // Hash value序列化 redisTemplate.setHashValueSerializer(fastJsonRedisSerializer); redisTemplate.setConnectionFactory(redisConnectionFactory); return redisTemplate;    }}

如图,我们并未注入RedisConnectionFactory 那么这个类在哪里被定义的呢?

通过在 LettuceConnectionFactory打了断点 然后发现 在LettuceConnectionConfiguration类中找到了答案

@Bean@ConditionalOnMissingBean(RedisConnectionFactory.class)LettuceConnectionFactory redisConnectionFactory(ObjectProvider<LettuceClientConfigurationBuilderCustomizer> builderCustomizers,ClientResources clientResources) {LettuceClientConfiguration clientConfig = getLettuceClientConfiguration(builderCustomizers, clientResources,getProperties().getLettuce().getPool());return createLettuceConnectionFactory(clientConfig);}

在 LettuceConnectionConfiguration 设置了@ConditionalOnMissingBean(RedisConnectionFactory.class)
意思就是如果当前容器中没找到redis连接工厂,那么就默认返回 LettuceConnectionFactory

安全期查询