Zwischenspeicherung in Spring Boot

Cache-Räumung in Spring Boot

1. Überblick

In diesem kurzen Tutorial lernen wirhow we can perform cache eviction using Spring.. Wir werden ein kleines Beispiel erstellen, um dies zu demonstrieren.

Bevor Sie fortfahren, lesen Sie unseren Artikel -Guide To Caching in Spring -, um sich mit der Funktionsweise von Spring Caching vertraut zu machen.

2. Wie lösche ich einen Cache?

Spring bietet zwei Möglichkeiten, einen Cache zu entfernen, entweder mithilfe der Annotation@CacheEvict für eine Methode oder indem dieCacheManger automatisch verkabelt und durch Aufrufen der Methodeclear() gelöscht werden.

Hier erfahren Sie, wie diese beiden Cache-Räumungsmechanismen im Code implementiert werden können.

2.1. Verwenden von@CacheEvict

Erstellen wir eine leere Methode mit der Annotation@CacheEvictund geben den Cache-Namen, den wir löschen möchten, als Argument für die Annotation an (in diesem Fall möchten wir den Cache mit dem Namen "first" löschen):

@CacheEvict(value = "first", allEntries = true)
public void evictAllCacheValues() {}

Spring will intercept all the methods annotated with @CacheEvict and clear all the values based on the allEntries flag. Es ist möglich, Werte basierend auf einem bestimmten Schlüssel zu entfernen.

Dazu müssen wir lediglich den Cache-Schlüssel als Argument an die Annotation anstelle des FlagsallEntriesübergeben:

@CacheEvict(value = "first", key = "#cacheKey")
public void evictSingleCacheValue(String cacheKey) {}

Da der Wert des Attributskey dynamisch ist, können wir entweder Spring Expression Language oder einen benutzerdefinierten Schlüsselgenerator verwenden, indem wirKeyGenerator implementieren, um die interessierenden Argumente oder die verschachtelten Eigenschaften auszuwählen.

2.2. Verwenden vonCacheManager

Schauen wir uns als nächstes an, wie wir den Cache mithilfe der vom Spring Cache-Modul bereitgestelltenCacheManager entfernen können. Zuerst müssen wir die implementierteCacheManager Bean automatisch verkabeln.

Und dann können wir die Caches basierend auf unseren Bedürfnissen löschen:

@Autowired
CacheManager cacheManager;

public void evictSingleCacheValue(String cacheName, String cacheKey) {
    cacheManager.getCache(cacheName).evict(cacheKey);
}

public void evictAllCacheValues(String cacheName) {
    cacheManager.getCache(cacheName).clear();
}

Wie wir im Code sehen können,the clear() method will clear all the cache entries and the evict() method will clear values based on a key.

3. Wie werden alle Caches entfernt?

Spring bietet keine sofort einsatzbereite Funktion zum Löschen aller Caches. Dies können wir jedoch leicht erreichen, indem wir diegetCacheNames()-Methode des Cache-Managers verwenden.

3.1. Räumung auf Abruf

Lassen Sie uns nun sehen, wie wir alle Caches bei Bedarf löschen können. Um einen Triggerpunkt zu erstellen, müssen wir zuerst einen Endpunkt verfügbar machen:

@RestController
public class CachingController {

    @Autowired
    CachingService cachingService;

    @GetMapping("clearAllCaches")
    public void clearAllCaches() {
        cachingService.evictAllCaches();
    }
}

InCachingService können wir dannclear all the caches by iterating over the cache names obtained from the cache manager:

public void evictAllCaches() {
    cacheManager.getCacheNames().stream()
      .forEach(cacheName -> cacheManager.getCache(cacheName).clear());
}

3.2. Automatische Räumung

Es gibt bestimmte Anwendungsfälle, in denen die Cache-Räumung in bestimmten Intervallen automatisch durchgeführt werden sollte. In diesem Fallwe can make use of the Spring’s task scheduler:

@Scheduled(fixedRate = 6000)
public void evictAllcachesAtIntervals() {
    evictAllCaches();
}

4. Fazit

Wir haben gelernt, wie Caches auf unterschiedliche Weise entfernt werden. Eine der bemerkenswerten Eigenschaften dieser Mechanismen ist, dass sie mit allen verschiedenen Cache-Implementierungen wie eh-cache, infini-span, apache-ignite usw. funktionieren.

Wie immer finden Sie alle in diesem Tutorial genannten Beispiele inover on Github.