Cache-uitzetting in Spring Boot

1. Overzicht

In deze korte tutorial gaan we leren hoe we cache-ontruiming kunnen uitvoeren met Spring. We zullen een klein voorbeeld maken om dit te demonstreren.

Lees voordat je verder gaat ons artikel - Gids voor caching in de lente - om vertrouwd te raken met hoe Spring caching werkt.

2. Hoe verwijder ik een cache?

Spring biedt twee manieren om een ​​cache te verwijderen, ofwel door de @CacheEvict annotatie op een methode of door de CacheManger en het wissen door de Doorzichtig() methode.

Hier leest u hoe deze twee mechanismen voor het verwijderen van cache in code kunnen worden geïmplementeerd.

2.1. Gebruik makend van @CacheEvict

Laten we een lege methode maken met @CacheEvict annotatie en geef de cachenaam op die we willen wissen als argument van de annotatie (in dit geval willen we de cache leegmaken met de naam "eerste"):

@CacheEvict (value = "first", allEntries = true) openbare leegte evictAllCacheValues ​​() {}

Spring onderschept alle methoden die zijn geannoteerd met @CacheEvict en wis alle waarden op basis van de alle inschrijvingen vlag. Het is mogelijk om waarden te verwijderen op basis van een bepaalde sleutel.

Hiervoor hoeven we alleen maar de cachesleutel door te geven als argument voor de annotatie in plaats van de alle inschrijvingen vlag:

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

Omdat de waarde van de sleutel attribuut is dynamisch, we kunnen Spring Expression Language of een aangepaste sleutelgenerator gebruiken door te implementeren KeyGenerator om de interessante argumenten of de geneste eigenschappen te kiezen.

2.2. Gebruik makend van CacheManager

Laten we vervolgens eens kijken hoe we de cache kunnen verwijderen met behulp van de CacheManager geleverd door de Spring Cache-module. Ten eerste moeten we de geïmplementeerde CacheManager Boon.

En dan kunnen we de caches ermee wissen op basis van onze behoeften:

@Autowired CacheManager cacheManager; openbare leegte evictSingleCacheValue (String cacheName, String cacheKey) {cacheManager.getCache (cacheName) .evict (cacheKey); } openbare leegte evictAllCacheValues ​​(String cacheName) {cacheManager.getCache (cacheName) .clear (); }

Zoals we kunnen zien in de code, de Doorzichtig() methode wist alle cache-items en de uitzetten methode zal waarden wissen op basis van een sleutel.

3. Hoe verwijder ik alle caches?

Spring biedt geen kant-en-klare functionaliteit om alle caches te wissen. Maar we kunnen dit eenvoudig bereiken door de getCacheNames () methode van de cachebeheerder.

3.1. Uitzetting op verzoek

Laten we nu kijken hoe we alle caches op aanvraag kunnen wissen. Om een ​​triggerpoint te creëren, moeten we eerst een endpoint blootleggen:

@RestController openbare klasse CachingController {@Autowired CachingService cachingService; @GetMapping ("clearAllCaches") openbare leegte clearAllCaches () {cachingService.evictAllCaches (); }}

In de CachingService, kunnen we dan wis alle caches door de cachenamen te herhalen die zijn verkregen van de cachebeheerder:

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

3.2. Automatische uitzetting

Er zijn bepaalde gebruikssituaties waarbij het verwijderen van de cache met bepaalde tussenpozen automatisch moet worden uitgevoerd. In dit geval, we kunnen gebruik maken van de taakplanner van Spring:

@Scheduled (fixedRate = 6000) openbare leegte evictAllcachesAtIntervals () {evictAllCaches (); }

4. Conclusie

We hebben geleerd hoe we caches op verschillende manieren kunnen verwijderen. Een van de dingen die het vermelden waard zijn over deze mechanismen is dat het zal werken met alle verschillende cache-implementaties zoals eh-cache, infini-span, apache-ignite etc.

Zoals altijd zijn alle voorbeelden die in deze tutorial worden genoemd, te vinden op Github.