@ConditionalOnMissingBean(name = "redisPersonAttributeDaos")
    @Bean
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    public BeanContainer<PersonAttributeDao> redisPersonAttributeDaos(
        final ConfigurableApplicationContext applicationContext,
        @Qualifier(CasSSLContext.BEAN_NAME)
        final CasSSLContext casSslContext,
        final CasConfigurationProperties casProperties) {
        return BeanSupplier.of(BeanContainer.class)
            .when(CONDITION.given(applicationContext.getEnvironment()))
            .supply(() -> {
                val redis = casProperties.getAuthn().getAttributeRepository().getRedis();
                return BeanContainer.of(redis
                    .stream()
                    .filter(r -> StringUtils.isNotBlank(r.getHost())).map(Unchecked.function(r -> {
                        val conn = RedisObjectFactory.newRedisConnectionFactory(r, true, casSslContext);
                        val template = RedisObjectFactory.newRedisTemplate(conn);
                        template.initialize();
                        val cb = new RedisPersonAttributeDao(template);
                        cb.setOrder(r.getOrder());
                        FunctionUtils.doIfNotNull(r.getId(), id -> cb.setId(id));
                        return cb;
                    }))
                    .collect(Collectors.toList()));
            })
            .otherwise(BeanContainer::empty)
            .get();
    }
This is {@link CasRedisAuthenticationAutoConfiguration}.

@author Misagh Moayyed
@since 6.1.0
support/cas-server-support-redis-authentication/src/main/java/org/apereo/cas/config/CasRedisAuthenticationAutoConfiguration.java