Ich probiere die @Cacheable
Annotation-Unterstützung für Spring 3.1 aus und frage mich, ob es eine Möglichkeit gibt, die zwischengespeicherten Daten nach einiger Zeit durch Festlegen einer TTL zu löschen. Nach dem, was ich sehen kann, muss ich es selbst klären, indem ich das verwende @CacheEvict
, und indem @Scheduled
ich das zusammen mit verwende, kann ich selbst eine TTL-Implementierung vornehmen, aber es scheint ein bisschen viel für eine so einfache Aufgabe zu sein?
99
Hier finden Sie ein vollständiges Beispiel für die Einrichtung des Guava-Cache im Frühjahr. Ich habe Guava über Ehcache verwendet, weil es etwas leichter ist und mir die Konfiguration direkter erschien.
Maven-Abhängigkeiten importieren
Fügen Sie diese Abhängigkeiten zu Ihrer Maven-POM-Datei hinzu und führen Sie Clean und Pakete aus. Diese Dateien sind die Guava dep- und Spring-Hilfsmethoden zur Verwendung im CacheBuilder.
Konfigurieren Sie den Cache
Sie müssen eine CacheConfig-Datei erstellen, um den Cache mithilfe der Java-Konfiguration zu konfigurieren.
Kommentieren Sie die zwischengespeicherte Methode
Fügen Sie die Annotation @Cacheable hinzu und übergeben Sie den Cache-Namen.
Ein vollständigeres Beispiel mit kommentierten Screenshots finden Sie hier: Guava Cache in Spring
quelle
Ich benutze Life Hacking so
quelle
reportCacheEvict
Methode von überall auf ? Wie passiert das cacheEvict?Springboot 1.3.8
und
quelle
Dies kann durch Erweitern von org.springframework.cache.interceptor.CacheInterceptor und Überschreiben der "doPut" -Methode - org.springframework.cache.interceptor.AbstractCacheInvoker erfolgen. Ihre Überschreibungslogik sollte die Put-Methode des Cache-Providers verwenden, mit der TTL für den Cache-Eintrag festgelegt werden kann (In meinem Fall verwende ich HazelcastCacheManager)
In Ihrer Cache-Konfiguration müssen Sie diese 2 Bean-Methoden hinzufügen und Ihre benutzerdefinierte Interceptor-Instanz erstellen.
Diese Lösung eignet sich, wenn Sie die TTL auf der Einstiegsebene und nicht global auf der Cache-Ebene festlegen möchten
quelle
Seit Spring-Boot 1.3.3 können Sie die Ablaufzeit in CacheManager mithilfe von RedisCacheManager.setExpires oder RedisCacheManager.setDefaultExpiration in der CacheManagerCustomizer- Rückruf-Bean festlegen .
quelle
Bei Verwendung von Redis kann TTL in einer Eigenschaftendatei wie folgt festgelegt werden:
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
quelle
Wenn Sie mit Redis und Java 8 arbeiten, können Sie sich JetCache ansehen :
@Cached(expire = 10, timeUnit = TimeUnit.MINUTES) User getUserById(long userId);
quelle