Estoy probando el @Cacheable
soporte de anotaciones para Spring 3.1 y me pregunto si hay alguna forma de borrar los datos almacenados en caché después de un tiempo estableciendo un TTL. En este momento, por lo que puedo ver, necesito borrarlo yo mismo usando el @CacheEvict
, y al usarlo junto con @Scheduled
, puedo hacer una implementación TTL yo mismo, pero ¿parece un poco demasiado para una tarea tan simple?
102
A continuación se muestra un ejemplo completo de cómo configurar Guava Cache en Spring. Usé Guava sobre Ehcache porque es un poco más liviano y la configuración me pareció más sencilla.
Importar dependencias de Maven
Agregue estas dependencias a su archivo pom maven y ejecute clean and packages. Estos archivos son los métodos de ayuda de Guava dep y Spring para su uso en CacheBuilder.
Configurar la caché
Necesita crear un archivo CacheConfig para configurar el caché usando la configuración de Java.
Anotar el método que se almacenará en caché
Agregue la anotación @Cacheable y pase el nombre de la caché.
Puede ver un ejemplo más completo aquí con capturas de pantalla anotadas: Guava Cache en Spring
fuente
Uso la vida hackear como este
fuente
reportCacheEvict
método desde cualquier lugar? ¿Cómo está pasando el cacheEvict?Springboot 1.3.8
y
fuente
esto se puede hacer extendiendo org.springframework.cache.interceptor.CacheInterceptor, y anulando el método "doPut" - org.springframework.cache.interceptor.AbstractCacheInvoker tu lógica de anulación debe usar el método put del proveedor de caché que sabe configurar TTL para la entrada de caché (en mi caso uso HazelcastCacheManager)
en su configuración de caché, debe agregar esos 2 métodos de frijol, creando su instancia de interceptor personalizada.
Esta solución es buena cuando desea configurar el TTL en el nivel de entrada y no globalmente en el nivel de caché
fuente
Desde Spring-boot 1.3.3, puede establecer el tiempo de expiración en CacheManager usando RedisCacheManager.setExpires o RedisCacheManager.setDefaultExpiration en el bean de devolución de llamada CacheManagerCustomizer .
fuente
Al usar Redis, TTL se puede configurar en un archivo de propiedades como este:
spring.cache.redis.time-to-live=1d # 1 day
spring.cache.redis.time-to-live=5m # 5 minutes
spring.cache.redis.time-to-live=10s # 10 seconds
fuente
Si está trabajando con redis y Java 8, puede echar un vistazo a JetCache :
@Cached(expire = 10, timeUnit = TimeUnit.MINUTES) User getUserById(long userId);
fuente