Gyorsítótár kilakoltatása a tavaszi csomagtartóban

1. Áttekintés

Ebben a rövid bemutatóban megtanuljuk hogyan tudjuk végrehajtani a gyorsítótár kiürítését a Spring segítségével. Készítünk egy kis példát ennek bemutatására.

A folytatás előtt olvassa el cikkünket - Útmutató a gyorsítótárazáshoz tavasszal -, hogy megismerje a tavaszi gyorsítótárazás működését.

2. Hogyan kell kitenni a gyorsítótárat?

A Spring kétféle módon biztosítja a gyorsítótár kiürítését, akár a @CacheEvict jelölés egy módszerhez vagy a CacheManger és a telefon hívásával törölje egyértelmű() módszer.

Így lehet ezt a két gyorsítótár-kilakoltatási mechanizmust kódban megvalósítani.

2.1. Használata @CacheEvict

Hozzunk létre egy üres módszert a @CacheEvict megjegyzéssel, és adja meg a gyorsítótár nevét, amelyet törölni akarunk a megjegyzés argumentumaként (ebben az esetben törölni akarjuk a gyorsítótárat az „első” névvel):

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

Tavasz minden metódust elfog @CacheEvict és törölje az összes értéket a allEntries zászló. Lehetséges az értékek kiürítése egy adott kulcs alapján.

Ehhez mindössze annyit kell tennünk, hogy a gyorsítótár kulcsot érvként átadjuk az annotációnak a allEntries zászló:

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

Mivel az értéke kulcs Az attribútum dinamikus, vagy használhatunk Spring Expression Language-t, vagy egy egyedi kulcsgenerátort megvalósítással KeyGenerator hogy kiválassza az érdekes érveket vagy a beágyazott tulajdonságokat.

2.2. Használata CacheManager

Ezután vessünk egy pillantást arra, hogy miként állíthatjuk ki a gyorsítótárat a CacheManager a Spring Cache modul biztosítja. Először is automatikusan vezetékeznünk kell a megvalósítottat CacheManager bab.

És akkor az igényeink alapján törölhetjük vele a gyorsítótárakat:

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

Amint a kódban láthatjuk, a egyértelmű() metódus törli az összes gyorsítótár bejegyzést és a megszerez() módszer kulcs alapján törli az értékeket.

3. Hogyan lehet kitenni az összes gyorsítótárat?

A Spring nem biztosítja a dobozon kívüli funkciót az összes gyorsítótár törléséhez. De ezt könnyen elérhetjük a getCacheNames () a gyorsítótár-kezelő metódusa.

3.1. Igény szerint kilakoltatás

Nézzük meg, hogyan törölhetjük az összes gyorsítótárat igény szerint. Trigerpont létrehozásához először ki kell tennünk egy végpontot:

@RestController public class CachingController {@Autowired CachingService cachingService; @GetMapping ("clearAllCaches") public void clearAllCaches () {cachingService.evictAllCaches (); }}

Ban,-ben CachingService, akkor megtehetjük törölje az összes gyorsítótárat a gyorsítótár-kezelőtől kapott gyorsítótár-nevek ismétlésével:

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

3.2. Automatikus kilakoltatás

Vannak olyan esetek, amikor a gyorsítótár kiürítését bizonyos időközönként automatikusan végre kell hajtani. Ebben az esetben, használhatjuk a Spring feladatütemezőjét:

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

4. Következtetés

Megtanultuk, hogyan lehet különféle módon kiüríteni a gyorsítótárakat. Az egyik dolog, amit érdemes megjegyezni ezeknél a mechanizmusoknál, az az, hogy minden különféle gyorsítótár-megvalósítással együtt fog működni, például: eh-cache, infini-span, apache-ignite stb.

Mint mindig, az oktatóanyagban említett összes példa megtalálható a Github oldalon.