Springboot аннотация @Cacheable пользовательский файл set key для задания времени истечения срока действия ключа и настройки его в конфигурации


Конфигурация класса Springboot RedisCacheManager задает время истечения срока действия ключа и настраивает его в конфигурационном файле
цель и эффект

RedisCache конфигурируется в springBoot. При использовании аннотации @Cacheable по умолчанию используется redisCache. Задавая время истечения срока действия различных ключей в конфигурационном файле, можно добиться эффекта настройки времени истечения срока действия ключа.
план
шаг1

Создайте новый класс Map для хранения устанавливаемого ключа

@ConfigurationProperties
public class Properties {

 private final Map<String, Duration> initCaches = Maps.newHashMap();

 public Map<String, Duration> getInitCaches() {
 return initCaches;
 }
}
Войдите в полноэкранный режим Выйти из полноэкранного режима

шаг 2

Напишите cacheManager в классе конфигурации redis и поместите в него набор карт

@Autowired
private Properties properties;

@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
    RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofMinutes(10)).disableCachingNullValues();

    RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory);

    ImmutableSet.Builder<String> cacheNames = ImmutableSet.builder();
    ImmutableMap.Builder<String, RedisCacheConfiguration> cacheConfig = ImmutableMap.builder();
    for (Map.Entry<String, Duration> entry : properties.getInitCaches().entrySet()) {
        cacheNames.add(entry.getKey());
        cacheConfig.put(entry.getKey(), defaultCacheConfig.entryTtl(entry.getValue()));
    }

    return RedisCacheManager.builder(redisCacheWriter)
            .cacheDefaults(defaultCacheConfig)
            .initialCacheNames(cacheNames.build())
            .withInitialCacheConfigurations(cacheConfig.build())
            .build();
}
Войти в полноэкранный режим Выйти из полноэкранного режима

шаг 3

Настроив время истечения срока действия соответствующего ключа в yml-файле Springboot, вы можете указать время истечения срока действия значения @Cacheable

//Fake code
@Cacheable(cacheNames = "fooboo", key = "#xxx", unless = "#result == null")
public void fooboo(String xxx){}
Войти в полноэкранный режим Выйти из полноэкранного режима

задается в файле applicaion.yml

initCaches:
  fooboo: 10m
  fooboo1: 1h
Ввести полноэкранный режим Выйти из полноэкранного режима

Тогда значение fooboo в кэше redis истекает через 10 минут, а значение fooboo1 истекает через 1 час

Оцените статью
Procodings.ru
Добавить комментарий