Izbacivanje predmemorije u proljetnom pokretanju

1. Pregled

U ovom kratkom uputstvu naučit ćemo kako možemo izvršiti izbacivanje predmemorije pomoću Springa. Stvorit ćemo mali primjer koji će to pokazati.

Prije nastavka, pogledajte naš članak - Vodič za predmemoriranje u proljeće - kako biste se upoznali s radom proljetnog predmemoriranja.

2. Kako deložirati predmemoriju?

Spring nudi dva načina za izbacivanje predmemorije, bilo pomoću @CacheEvict napomena o metodi ili automatskim ožičenjem CacheManger i očistiti ga pozivom na čisto() metoda.

Evo kako se ova dva mehanizma za izbacivanje predmemorije mogu implementirati u kod.

2.1. Koristeći @CacheEvict

Stvorimo praznu metodu s @CacheEvict napomena i navedite naziv predmemorije koji želimo obrisati kao argument napomene (u ovom slučaju želimo obrisati predmemoriju imenom "prvo"):

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

Proljeće će presresti sve metode označene s @CacheEvict i očistite sve vrijednosti na temelju allEntries zastava. Moguće je deložirati vrijednosti na temelju određenog ključa.

Za to sve što trebamo učiniti je proslijediti ključ predmemorije kao argument napomeni, umjesto allEntries zastava:

@CacheEvict (value = "first", key = "#cacheKey") javna praznina evictSingleCacheValue (niz cacheKey) {}

Budući da je vrijednost ključ atribut je dinamičan, implementacijom možemo upotrijebiti Spring Expression Language ili prilagođeni generator ključeva KeyGenerator odabrati argumente od interesa ili ugniježđena svojstva.

2.2. Koristeći CacheManager

Dalje, pogledajmo kako možemo izbaciti predmemoriju pomoću CacheManager pruža modul Spring Cache. Prvo, moramo automatski povezati implementirano CacheManager grah.

A onda njime možemo očistiti predmemorije na temelju naših potreba:

@Autowired CacheManager cacheManager; javna praznina evictSingleCacheValue (Niz cacheName, Niz cacheKey) {cacheManager.getCache (cacheName) .evict (cacheKey); } javna praznina evictAllCacheValues ​​(Niz cacheName) {cacheManager.getCache (cacheName) .clear (); }

Kao što možemo vidjeti u kodu, the čisto() metoda će obrisati sve unose u predmemoriju i iseliti() metoda će obrisati vrijednosti na temelju ključa.

3. Kako izbaciti sve predmemorije?

Spring ne nudi funkcionalnost iz kutije za brisanje svih predmemorija. Ali to možemo lako postići pomoću getCacheNames () metoda upravitelja predmemorije.

3.1. Deložacija na zahtjev

Pogledajmo sada kako možemo očistiti sve predmemorije na zahtjev. Da bismo stvorili točku okidača, prvo moramo izložiti krajnju točku:

@RestController javna klasa CachingController {@Autowired CachingService cachingService; @GetMapping ("clearAllCaches") javna praznina clearAllCaches () {cachingService.evictAllCaches (); }}

U CachingService, možemo onda obrišite sve predmemorije prevrtanjem imena predmemorije dobivenih od upravitelja predmemorije:

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

3.2. Automatsko iseljenje

Postoje određeni slučajevi upotrebe kada bi se izbacivanje predmemorije trebalo izvršiti automatski u određenim intervalima. U ovom slučaju, možemo se poslužiti planerom zadataka Springa:

@Scheduled (fixedRate = 6000) javna praznina evictAllcachesAtIntervals () {evictAllCaches (); }

4. Zaključak

Naučili smo kako izbaciti predmemoriju na različite načine. Jedna od stvari koje vrijedi napomenuti kod ovih mehanizama jest da će raditi sa svim različitim implementacijama predmemorije, poput eh-cache, infini-span, apache-ignite itd.

Kao i uvijek, svi primjeri spomenuti u ovom vodiču mogu se naći na Githubu.