Cache-udsættelse i Spring Boot

1. Oversigt

I denne korte vejledning lærer vi hvordan vi kan udføre cacheudkastning ved hjælp af Spring. Vi opretter et lille eksempel for at demonstrere dette.

Før du fortsætter, skal du tjekke vores artikel - Guide til caching om foråret - for at blive fortrolig med, hvordan Spring caching fungerer.

2. Hvordan udsættes en cache?

Spring giver to måder at udskyde en cache på, enten ved hjælp af @CacheEvict anmærkning om en metode eller ved automatisk kabelføring af CacheManger og rydde det ved at ringe til klar() metode.

Her er hvordan disse to cacheudkastningsmekanismer kan implementeres i kode.

2.1. Ved brug af @CacheEvict

Lad os oprette en tom metode med @CacheEvict kommentar og angiv cache-navnet, som vi vil rydde som et argument for kommentaren (i dette tilfælde vil vi rydde cachen med navnet "først"):

@CacheEvict (værdi = "første", allEntries = sand) offentlig ugyldig evictAllCacheValues ​​() {}

Foråret vil opfange alle de metoder, der er kommenteret med @CacheEvict og ryd alle værdier baseret på alle indgange flag. Det er muligt at skubbe værdier ud fra en bestemt nøgle.

Til dette er alt, hvad vi skal gøre, at videregive cache-nøglen som et argument til kommentaren i stedet for alle indgange flag:

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

Da værdien af nøgle attribut er dynamisk, kan vi enten bruge Spring Expression Language eller en brugerdefineret nøglenerator ved at implementere KeyGenerator for at vælge argumenter af interesse eller de indlejrede ejendomme.

2.2. Ved brug af CacheManager

Lad os derefter se på, hvordan vi kan kaste cachen ud ved hjælp af CacheManager leveret af Spring Cache-modulet. Først skal vi automatisk tilslutte det implementerede CacheManager bønne.

Og så kan vi rydde cacherne med det ud fra vores behov:

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

Som vi kan se i koden, det klar() metoden rydder alle cache-poster og kaste ud () metode sletter værdier baseret på en nøgle.

3. Hvordan udelukkes alle cacher?

Foråret giver ikke en out of the box-funktionalitet til at rydde alle caches. Men vi kan nemt nå dette ved at bruge getCacheNames () metode til cache-manager.

3.1. Eviction on Demand

Lad os nu se, hvordan vi kan rydde alle cacher efter behov. For at skabe et triggerpunkt skal vi først eksponere et slutpunkt:

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

I CachingService, kan vi så ryd alle cacherne ved at gentage cache-navnene fra cache-manager:

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

3.2. Automatisk udsættelse

Der er visse brugstilfælde, hvor cacheudkastning skal udføres automatisk med bestemte intervaller. I dette tilfælde, vi kan gøre brug af forårets opgaveplanlægning:

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

4. Konklusion

Vi har lært, hvordan man kaster cache ud på forskellige måder. En af de ting, der er værd at bemærke om disse mekanismer, er at det fungerer med alle de forskellige cache-implementeringer som eh-cache, infini-span, apache-ignite osv.

Som altid kan alle eksemplerne nævnt i denne vejledning findes på Github.


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