Время истечения времени загрузки @cacheable spring
Я реализовал кеш, и теперь я хочу добавить время истечения.
Как я могу установить время истечения при весенней загрузке с @Cacheable
?
Это фрагмент кода:
@Cacheable(value="forecast",unless="#result == null")
Ответы
Ответ 1
Я использую такой хакерский взлом
@Configuration
@EnableCaching
@EnableScheduling
public class CachingConfig {
public static final String GAMES = "GAMES";
@Bean
public CacheManager cacheManager() {
ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager(GAMES);
return cacheManager;
}
@CacheEvict(allEntries = true, value = {GAMES})
@Scheduled(fixedDelay = 10 * 60 * 1000 , initialDelay = 500)
public void reportCacheEvict() {
System.out.println("Flush Cache " + dateFormat.format(new Date()));
}
}
Ответ 2
Из справочной документации
Непосредственно через поставщика кешей. Абстракция кэша... ну, абстракция не является реализацией кэша. Решение, которое вы используете, может поддерживать различные политики данных и различные топологии, которые другие решения не выполняют (например, JDK ConcurrentHashMap) - выявление того, что в абстракции кеша было бы бесполезно просто потому, что поддержка поддержки не поддерживалась. Такая функциональность должна контролироваться непосредственно через кеш резервной копии при ее настройке или через собственный API.
Ответ 3
Обратите внимание, что в этом ответе используется ehcache, который является одним из поддерживаемых менеджеров кеша Spring Boot и, возможно, одним из самых популярных.
Сначала вам нужно добавить в pom.xml
:
<!-- Spring Framework Caching Support -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
В src/main/resources/ehcache.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<defaultCache eternal="true" maxElementsInMemory="100" overflowToDisk="false" />
<cache name="forecast"
maxElementsInMemory="1000"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
memoryStoreEvictionPolicy="LRU" />
</ehcache>
Ответ 4
Вы не можете указать время истечения срока действия с помощью нотации @cacheable, поскольку @cacheable не предоставляет такой настраиваемой опции.
Однако различные поставщики кэширования, обеспечивающие кэширование spring, предоставили эту функцию через свои собственные конфигурации. Например NCache/TayzGrid позволяет вам создать разные области кэша с настраиваемым временем истечения срока действия.
Если вы внедрили свой собственный кеш, вам нужно будет определить способ определения срока действия вашего провайдера кеша, а также потребуется включить логику истечения в ваше решение.
Ответ 5
Я использую кофеин-кеширование с этой конфигурацией в течение 60 минут:
spring.cache.cache-names=forecast
spring.cache.caffeine.spec=expireAfterWrite=60m