복붙노트

[REDIS] 스프링 데이터의 2.0.x에서 RedisCacheManager을 만드는 방법

REDIS

스프링 데이터의 2.0.x에서 RedisCacheManager을 만드는 방법

나는 2.0.x가 봄 부팅 1.5.x 이하에서 내 애플리케이션을 마이그레이션하고있어 나는 jedis을 유지하지만 나는 RedisCacheManager의 인스턴스에 문제가 있습니다.

이제 생성자 서명은

RedisCacheManager(RedisCacheWriter cacheWriter, RedisCacheConfiguration defaultCacheConfiguration)

그러나 이전했다 :

RedisCacheManager(RedisOperations redisOperations)

나는 범위에서만 RedisTemplate을 가진이 빈을 정의한다 :

@Bean
public RedisCacheManager redisCacheManager(RedisTemplate redisTemplate) {
    HandleRedisCacheManager redisCacheManager = new HandleRedisCacheManager(redisTemplate);
    redisCacheManager.setUsePrefix(true);
    return redisCacheManager;
}

어떻게 지금 생성하도록되어?

해결법

  1. ==============================

    1.그것은 더 이상 RedisTemplate을 허용하지 않습니다. 그래서이 시도 :

    그것은 더 이상 RedisTemplate을 허용하지 않습니다. 그래서이 시도 :

    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory,
                                          ResourceLoader resourceLoader) {
        RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager
                .builder(redisConnectionFactory)
                .cacheDefaults(determineConfiguration(resourceLoader.getClassLoader()));
        List<String> cacheNames = this.cacheProperties.getCacheNames();
        if (!cacheNames.isEmpty()) {
            builder.initialCacheNames(new LinkedHashSet<>(cacheNames));
        }
        return builder.build();
    }
    
    private org.springframework.data.redis.cache.RedisCacheConfiguration determineConfiguration(
            ClassLoader classLoader) {
        if (this.redisCacheConfiguration != null) {
            return this.redisCacheConfiguration;
        }
        CacheProperties.Redis redisProperties = this.cacheProperties.getRedis();
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
    
        ObjectMapper mapper = new Jackson2ObjectMapperBuilder()
                .modulesToInstall( new SimpleModule().addSerializer( new NullValueSerializer(null)) )
                .failOnEmptyBeans( false )
                .build();
        mapper.enableDefaultTyping( ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
    
        GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer( mapper );
    
        //get the mapper b/c they registered some internal modules
        config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer));;
    
        if (redisProperties.getTimeToLive() != null) {
            config = config.entryTtl(redisProperties.getTimeToLive());
        }
        if (redisProperties.getKeyPrefix() != null) {
            config = config.prefixKeysWith(redisProperties.getKeyPrefix());
            config = config.computePrefixWith(cacheName -> redisProperties.getKeyPrefix() + cacheName + "::");
        }
        if (!redisProperties.isCacheNullValues()) {
            config = config.disableCachingNullValues();
        }
        if (!redisProperties.isUseKeyPrefix()) {
            config = config.disableKeyPrefix();
        }
        return config;
    }
    
  2. ==============================

    2.코드를 다음 시도는 봄 부팅 2.1.0.RELEASE에 나를 위해 작동

    코드를 다음 시도는 봄 부팅 2.1.0.RELEASE에 나를 위해 작동

    @Bean
    public RedisCacheManager redisCacheManager(LettuceConnectionFactory lettuceConnectionFactory) {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .disableCachingNullValues()
                .entryTtl(Duration.ofHours(1))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.json()));
        redisCacheConfiguration.usePrefix();
    
       return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(lettuceConnectionFactory)
                        .cacheDefaults(redisCacheConfiguration).build();
    
    }    
    
  3. from https://stackoverflow.com/questions/51418161/how-to-create-rediscachemanager-in-spring-data-2-0-x by cc-by-sa and MIT license