caching - open - Tiempo de caducidad @ bota de resorte portátil
whatsapp cache link (5)
De la documentación de referencia.
Directamente a través de su proveedor de caché. La abstracción del caché es ... bueno, una abstracción no una implementación del caché. La solución que está utilizando puede admitir varias políticas de datos y diferentes topologías que otras soluciones no (por ejemplo, el JDK ConcurrentHashMap): exponer eso en la abstracción del caché sería inútil simplemente porque no habría soporte de respaldo. Dicha funcionalidad debe controlarse directamente a través del caché de respaldo, al configurarlo o a través de su API nativa.
He implementado un caché. Ahora quiero añadir un tiempo de caducidad. ¿Cómo puedo establecer un tiempo de caducidad en el arranque de primavera con @Cacheable
?
Este es un fragmento de código:
@Cacheable (valor = "previsión", a menos que = "# resultado == nulo")
No puede especificar el tiempo de caducidad con la notación @cacheable, ya que @cacheable no proporciona ninguna de estas opciones configurables.
Sin embargo, diferentes proveedores de almacenamiento en caché que proporcionan almacenamiento en caché Spring han proporcionado esta función a través de sus propias configuraciones. Por ejemplo, NCache / TayzGrid permite crear diferentes regiones de caché con un tiempo de vencimiento configurable .
Si ha implementado su propio caché, deberá definir una manera de especificar la caducidad en su proveedor de caché y también deberá incorporar la lógica de caducidad en su solución.
Tenga en cuenta que esta respuesta utiliza ehcache , que es uno de los administradores de caché de Spring Boot compatibles, y posiblemente uno de los más populares.
Primero necesitas agregar a 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>
En 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>
Uso el almacenamiento en caché de cafeína, con esta configuración para una caducidad de 60 minutos:
spring.cache.cache-names=forecast
spring.cache.caffeine.spec=expireAfterWrite=60m
Uso la vida hackeando así.
@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()));
}
}