web-dev-qa-db-fra.com

Délai d'expiration @ démarrage à ressort

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")
21
nole

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()));
        }
    }
13
Atum

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.

8
Stephane Nicoll

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.

1
Sameer Shah

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
0
slartidan