Spring data redis 2.0.3 LettuceConnectionFactory на cacheManager создает ключ кеша в пустом пространстве имен (папке) в упомянутом кеше

Я новичок в весенних данных Redis. Я использовал весенние загрузочные данные redis 2.0.3, как показано ниже (из моей сборки gradle)

compile('org.springframework.boot:spring-boot-starter-data-redis:2.0.3.RELEASE')
compile('io.lettuce:lettuce-core:5.1.3.RELEASE')

Когда я пытаюсь создать create(PUT) или get(GET), в диспетчере Redis Desktop он заметил, что ключ создан в указанном сегменте, но в пустом пространстве имен (папке) под сегментом. Но я хочу создать ключи кеша только в ведре (пространство имен), но не в пустой подпапке, например в другом пустом пространстве имен (папка - я мог видеть из диспетчера рабочего стола Redis)

@Bean
LettuceConnectionFactory lettuceClientConfigurationConnectionFactory() {
    RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
    redisStandaloneConfiguration.setHostName(redisHostName);
    redisStandaloneConfiguration.setPort(redisPort);
    redisStandaloneConfiguration.setPassword(RedisPassword.of(redisAuth));
    redisStandaloneConfiguration.setDatabase(0);

    LettuceClientConfiguration.LettuceClientConfigurationBuilder lettuceClientConfiguration = LettuceClientConfiguration.builder();

    lettuceClientConfiguration.useSsl();

    LettuceConnectionFactory lettuceConFactory = new LettuceConnectionFactory(redisStandaloneConfiguration,
            lettuceClientConfiguration.build());

    return lettuceConFactory;
}

@Bean
public RedisCacheConfiguration cacheConfiguration() {
    RedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
    RedisSerializer stringRedisSerializer = new StringRedisSerializer();

    RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
            .disableCachingNullValues()
            .entryTtl(Duration.ofHours(1))
            .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer))
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer));
    redisCacheConfiguration.usePrefix();
    return redisCacheConfiguration;
}

@Bean
@Primary
public CacheManager  initRedisCacheManager(LettuceConnectionFactory factory) {

    RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager
            .RedisCacheManagerBuilder.fromConnectionFactory(factory);
    builder.cacheDefaults(cacheConfiguration());
    builder.transactionAware();
    RedisCacheManager cacheManager = builder.build();
    cacheManager.afterPropertiesSet();
    return cacheManager;
}

person N Raj    schedule 21.01.2019    source источник


Ответы (1)


Я мог бы решить проблему, убедившись, что префиксKyesWith установлен для каждого сегмента кеша, поэтому операции put и get ищут правильное место для хранения/чтения.

/** * получает средство записи кэша Redis * @return RedisCacheWriter */ @Bean RedisCacheWriter redisCacheWriter() { return RedisCacheWriter.lockingRedisCacheWriter(lettuceClientConfigurationConnectionFactory()); }

/** * получает диспетчер кеша * @return CacheManager */ @Bean @Primary CacheManager cacheManager() { RedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); Map cacheNamesConfigurationMap = new HashMap‹>();

    // configure catch buckets with prefixKeysWith information
    cacheNamesConfigurationMap.put(CacheBucket.A, RedisCacheConfiguration.defaultCacheConfig().prefixKeysWith(CacheBucket.A+":")
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer)));
    cacheNamesConfigurationMap.put(CacheBucket.B, RedisCacheConfiguration.defaultCacheConfig().prefixKeysWith(CacheBucket.B+":")
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer)));
    cacheNamesConfigurationMap.put(CacheBucket.D, RedisCacheConfiguration.defaultCacheConfig().prefixKeysWith(CacheBucket.D+":")
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer)));
    cacheNamesConfigurationMap.put(CacheBucket.E, RedisCacheConfiguration.defaultCacheConfig().prefixKeysWith(CacheBucket.E+":")
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer)));
    cacheNamesConfigurationMap.put(CacheBucket.F, RedisCacheConfiguration.defaultCacheConfig().prefixKeysWith(CacheBucket.F+":")
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer)));

    RedisCacheManager cacheManager =  new RedisCacheManager(redisCacheWriter(), cacheConfiguration(), cacheNamesConfigurationMap);
    cacheManager.setTransactionAware(true);
    cacheManager.afterPropertiesSet();
    return cacheManager;
}
person N Raj    schedule 22.01.2019