Cache Eviction in Spring Boot

1. Oversikt

I denne korte opplæringen skal vi lære hvordan vi kan utføre cacheutkastelse ved hjelp av Spring. Vi skal lage et lite eksempel for å demonstrere dette.

Før du fortsetter, kan du sjekke ut artikkelen vår - Guide to Caching in Spring - for å bli kjent med hvordan vår caching fungerer.

2. Hvordan kaste ut en cache?

Spring gir to måter å kaste ut en cache, enten ved å bruke @CacheEvict kommentar på en metode eller ved å koble kabelen automatisk CacheManger og tømme det ved å ringe klar() metode.

Slik kan disse to cache-bortkastingsmekanismene implementeres i kode.

2.1. Ved hjelp av @CacheEvict

La oss lage en tom metode med @CacheEvict kommentar og oppgi hurtigbuffernavnet som vi vil slette som et argument for kommentaren (i dette tilfellet vil vi tømme hurtigbufferen med navnet "først"):

@CacheEvict (value = "first", allEntries = true) offentlig ugyldig evictAllCacheValues ​​() {}

Våren vil fange opp alle metodene som er merket med @CacheEvict og tøm alle verdiene basert på allEntries flagg. Det er mulig å kaste ut verdier basert på en bestemt nøkkel.

For dette er alt vi trenger å gjøre å overføre hurtigbuffertasten som et argument til kommentaren i stedet for allEntries flagg:

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

Siden verdien av nøkkel attributtet er dynamisk, kan vi enten bruke Spring Expression Language eller en tilpasset nøkkelgenerator ved å implementere KeyGenerator for å velge argumentene av interesse eller de nestede eiendommene.

2.2. Ved hjelp av CacheManager

Deretter, la oss ta en titt på hvordan vi kan kaste ut hurtigbufferen ved hjelp av CacheManager levert av Spring Cache-modulen. Først må vi automatisk koble det implementerte CacheManager bønne.

Og så kan vi fjerne cachene med det basert på våre behov:

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

Som vi kan se i koden, de klar() metoden sletter alle hurtigbufferoppføringene og kaste() metoden vil fjerne verdier basert på en nøkkel.

3. Hvordan kaste ut alle cacher?

Våren gir ikke en out of the box-funksjonalitet for å rydde alle cachene. Men vi kan enkelt oppnå dette ved å bruke getCacheNames () metode for hurtigbufferbehandling.

3.1. Eviction on Demand

La oss nå se hvordan vi kan fjerne alle hurtigbuffer på forespørsel. For å opprette et triggerpunkt må vi først avsløre et endepunkt:

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

I CachingService, kan vi da tøm alle hurtigbufferne ved å itere over hurtigbufferenavnene du har fått fra hurtigbufferstyreren:

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

3.2. Automatisk utkastelse

Det er visse brukstilfeller der cache-utkastelse skal utføres automatisk med bestemte intervaller. I dette tilfellet, vi kan benytte vårens oppgaveplanlegger:

@Scheduled (fixedRate = 6000) offentlig ugyldig evictAllcachesAtIntervals () {evictAllCaches (); }

4. Konklusjon

Vi har lært å kaste ut cacher på forskjellige måter. En av tingene det er verdt å merke seg om disse mekanismene er at den vil fungere med alle de forskjellige cacheimplementeringene som eh-cache, infini-span, apache-ignite etc.

Som alltid kan alle eksemplene nevnt i denne opplæringen finnes på Github.


$config[zx-auto] not found$config[zx-overlay] not found