Feder Zwischengespeichert vs CachePut?
@CachePut or @Cacheable(value = "CustomerCache", key = "#id")
public Customer updateCustomer(Customer customer) {
sysout("i am inside updateCustomer");
....
return customer;
}
Fand ich unter Dokumentation unter CachePut
Quellcode
CachePut annotation führt nicht zu dem Ziel-Methode übersprungen werden -
sondern es führt immer zu der Methode, die aufgerufen werden soll und deren Ergebnis
in der cache.
Bedeutet es, wenn ich @Cacheable
, updateCustomer-Methode wird nur einmal ausgeführt und das Ergebnis aktualisiert, cache. Nachfolgende Aufrufe
updateCustomer wird nicht ausgeführt, updateCustomer , wird es nur den cache aktualisieren.
Während im Fall von @CachePut
, updateCustomer
Methode ausgeführt werden, bei jedem Aufruf, und das Ergebnis wird aktualisiert werden, im cache.
Ist mein Verständnis richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja.
Ich noch einen test um sicher zu sein:
@CachePut immer können die Methode execute. Es wird allgemein verwendet, wenn Sie möchten, dass Ihre Caches aktualisiert werden, mit dem Ergebnis, die Ausführung der Methode.
Beispiel: Wenn Sie wollen, um die Aktualisierung veralteter Daten, die zwischengespeichert wird, statt, wenn der cache komplett.
@Cacheable wird nur einmal ausgeführt, die für die gegebene cachekey und nachfolgende Anfragen nicht ausgeführt, die Methode, bis der cache abläuft oder gespült wird.
@CacheEvict
annotation, dann, nach der Methode mit@Cachable
annotation ausgeführt werden?@CachePut
wenn Sie möchten, zu bereinigen, den cache zum Beispiel einen veralteten Daten, die sitzen dort und Sie wollen Zwischenspeichern einige back-End-Daten.Ja, Sie sind absolut richtig.
@Cacheput und @Cacheable in Verbindung verwendet werden.
@Cacheable keine Aktualisierung des cache bei jedem Aufruf. Um die zu entfernen veraltete Daten, muss es einen Dienst, der verwendet die @Cacheput, dass löscht die veralteten Daten.
Unten Antwort ist für diejenigen, die mit Guave-caching cache.
Mit Guave-caching, das Zeitintervall, das angewendet wird, leeren Sie den cache nach einer gewissen Zeit, das ist nicht der Fall mit @Cacheput. @Cacheput werden nur die Werte aktualisiert, die sind veraltet und daher ruft er die Methode jedes mal den cache aktualisieren.
Ich hoffe meine Antwort klärt Ihre Frage.