wake-up-neo.com

Ablaufzeit @cacheable spring boot

Ich habe einen Cache implementiert und möchte nun eine Ablaufzeit hinzufügen.

Wie kann ich mit @Cacheable eine Ablaufzeit im Springboot einstellen? 

Dies ist ein Code-Snippet:

@Cacheable(value="forecast",unless="#result == null")
21
nole

Ich benutze Life Hacking so 

    @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

Aus der Referenzdokumentation

Direkt über Ihren Cache-Provider. Die Cache-Abstraktion ist… nun, eine Abstraktion, keine Cache-Implementierung. Die von Ihnen verwendete Lösung unterstützt möglicherweise verschiedene Datenrichtlinien und verschiedene Topologien, die andere Lösungen nicht bieten (z. B. die JDK ConcurrentHashMap) - wenn Sie herausfinden, dass die Cache-Abstraktion nutzlos wäre, nur weil es keine Unterstützung für die Unterstützung gibt. Diese Funktionalität sollte direkt durch den Backing-Cache, bei deren Konfiguration oder durch die native API gesteuert werden.

8
Stephane Nicoll

Beachten Sie, dass in dieser Antwort ehcache verwendet wird, einer der unterstützten Spring Boot-Cache-Manager und wohl einer der beliebtesten.

Zuerst müssen Sie pom.xml Hinzufügen:

<!-- 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>

In 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>
7
Steve

Sie können keine Verfallszeit mit @cacheable-Notation angeben, da @cacheable keine solche konfigurierbare Option bietet.

Verschiedene Caching-Anbieter, die Spring Caching anbieten, haben diese Funktion jedoch durch ihre eigenen Konfigurationen bereitgestellt. Mit NCache / TayzGrid können Sie verschiedene Cache-Bereiche mit konfigurierbarer Ablaufzeit erstellen.

Wenn Sie einen eigenen Cache implementiert haben, müssen Sie eine Methode zum Angeben des Ablaufs in Ihrem Cacheanbieter definieren und außerdem eine Ablauflogik in Ihre Lösung integrieren.

1
Sameer Shah

Ich verwende Koffein-Caching mit dieser Konfiguration für eine 60-minütige Ablaufzeit:

spring.cache.cache-names=forecast
spring.cache.caffeine.spec=expireAfterWrite=60m
0
slartidan