Конфигурация класса 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 час