J'ai implémenté un cache et je souhaite maintenant ajouter un délai d'expiration.
Comment définir une heure d'expiration dans Spring Boot avec @Cacheable
?
Ceci est un extrait de code:
@Cacheable(value="forecast",unless="#result == null")
J'utilise la vie piratage comme ça
@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()));
}
}
De la documentation de référence
Directement auprès de votre fournisseur de cache. L'abstraction de cache est… eh bien, une abstraction pas une implémentation de cache. La solution que vous utilisez peut prendre en charge diverses stratégies de données et différentes topologies, ce qui n’est pas le cas des autres solutions (par exemple, le JDK ConcurrentHashMap) - exposer cela dans l’abstraction de cache serait inutile simplement parce qu’il n’y aurait aucun support. Ces fonctionnalités doivent être contrôlées directement via le cache de sauvegarde, lors de la configuration ou via son API native.
Vous ne pouvez pas spécifier l'heure d'expiration avec la notation @cacheable, car @cacheable ne fournit aucune option configurable de ce type.
Cependant, différents fournisseurs de mise en cache fournissant une mise en cache printanière ont fourni cette fonctionnalité via leurs propres configurations. Par exemple, NCache / TayzGrid vous permet de créer différentes régions de cache avec un délai d'expiration configurable .
Si vous avez implémenté votre propre cache, vous devez définir un moyen de spécifier l'expiration dans votre fournisseur de cache. Vous devez également intégrer une logique d'expiration dans votre solution.
J'utilise la mise en cache de la caféine, avec cette configuration pour une expiration de 60 minutes:
spring.cache.cache-names=forecast
spring.cache.caffeine.spec=expireAfterWrite=60m