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.