Установить ключ срока действия в определенное время при использовании кэширования Spring с Redis

Я использую аннотации абстракции кэширования Spring, чтобы применить кеширование к моим методам обслуживания.

Поскольку я использую Redis в качестве хранилища кеша, я хочу использовать опцию истечения срока действия кеша в определенное время, поскольку это поддерживается Redis. Команда expireat в redis может использоваться для установки времени истечения срока действия в будущем.

Я не уверен, как я могу сделать это для ключей, которые являются частью моего кеша при использовании RedisCache.

Я попытался настроить RedisCacheManager, создав его bean-компонент.

Я вижу, что есть метод getNativeCache (). но я не нашел способа установить значение для истечения срока его использования.

Если есть способ настроить RedisCacheManager так, чтобы все ключи определенного кеша использовали то же время, что и срок действия, сообщите мне.

Создание Twitter-подобного приложения Trending Topics App с Redis (на примере PHP)
Создание Twitter-подобного приложения Trending Topics App с Redis (на примере PHP)
Redis - это популярная база данных типа "ключ-значение" в памяти с поддержкой различных типов и структур данных, которая в основном используется для...
5
0
6 233
2

Ответы 2

На самом деле есть. Пожалуйста, проверьте ниже:

RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
            .disableCachingNullValues()
            .entryTtl(<your duration>)
            .computePrefixWith(CacheKeyPrefix.simple())
            .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory)
            .cacheDefaults(configuration)
            .build();

Я использую версию Spring Boot 2.0.4.RELEASE. А если вы используете более старые версии, вот как это сделать:

RedisCacheManager cacheManager =
            new RedisCacheManager(
                    redisTemplate,//redis template
                    Arrays.asList("my-cahce"),//loads these caches at startup
                    false);//Do not allow null values
    cacheManager.setLoadRemoteCachesOnStartup(true);
    cacheManager.setCachePrefix(new DefaultRedisCachePrefix());
    cacheManager.setDefaultExpiration(TimeUnit.SECONDS.convert(365, TimeUnit.DAYS));

Как это решить, истекая в определенное время, а не по продолжительности?

Imaskar 10.08.2018 11:11

Спасибо за ответ. Но я спросил не об этом. Я хочу, чтобы срок действия кеша истекал в абсолютное время, а не после истечения / завершения секунд. Я хочу использовать средство истечения срока действия Redis через Spring Cache Manager.

juser 10.08.2018 19:50

извините, не понял вопрос должным образом

Siva praneeth Alli 12.08.2018 16:37
@Bean (name = "cacheManager")
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
    RedisCacheConfiguration conf_ready_info = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofMillis(50000));

    RedisCacheConfiguration conf_base_info = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofMillis(60000));

    Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<String, RedisCacheConfiguration>();
    cacheConfigurations.put("base_info", conf_base_info);
    cacheConfigurations.put("ready_info", conf_ready_info);

    return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(connectionFactory)
            .withInitialCacheConfigurations(cacheConfigurations).build();
}


@Cacheable(value = "ready_info", key = "#aid")
public String  findByAid(String aid) throws Exception { 
    String readyInfo = "";
    return readyInfo;
}

сэкономь мое время! спасибо! Я добавляю одно описание офиса: Кеши, требующие конфигурации RedisCacheConfiguration, отличной от конфигурации по умолчанию, можно указать через RedisCacheManager.RedisCacheManagerBuilder.withInitialCacheC‌ onfigurations (Map).

billschen 30.01.2019 04:04

Другие вопросы по теме