Bevezetés a Guava CacheLoader programba

1. Bemutatkozás

Ebben a cikkben bemutatjuk a guavát CacheLoader.

Mielőtt tovább olvasna, ajánlott, hogy alaposan megismerje a LoadingCache osztály első. Ez azért van, mert a CacheLoader kifejezetten vele működik.

Lényegében a CacheLoader egy függvény, amelyet arra használnak, hogy kiszámítsák az értéket, ha az nem található meg a guavában LoadingCache.

2. Használja a CacheLoader Val,-vel LoadingCache

Ha van egy gyorsítótár-hiány a LoadingCache, vagy a gyorsítótárat frissíteni kell, a CacheLoader értékek kiszámításához fogják használni. Ez elősegíti a gyorsítótárazás logikájának egy helyre történő beillesztését, ezáltal összetartóbbá téve kódunkat.

2.1. Maven-függőség

Először tegyük hozzá Maven-függőségünket:

 com.google.guava guava 29.0-jre 

A legújabb verziót a Maven tárházban találja meg.

2.2. Számítási és gyorsítótár-értékek

Most nézzük meg, hogyan tudjuk példányosítani a LoadingCache val,-vel CacheLoader:

LoadingCache loadingCache = CacheBuilder.newBuilder () .build (new CacheLoader () {@Orride public String load (final String s) dob kivételeket {return slowMethod (s);}});

Lényegében a LoadingCache felhívja a soron belüli telefonszámunkat CacheLoader amikor ki kell számolnia egy olyan értéket, amely nem volt gyorsítótárazott. Próbáljuk megszámolni, hányszor slowMethod () akkor hívjuk meg, ha többször is lekérünk valamit a gyorsítótárból:

Karakterlánc értéke = loadingCache.get ("kulcs"); érték = loadingCache.get ("kulcs"); assertThat (callCount) .isEqualTo (1); assertThat (érték) .isEqualTo ("várható érték"); 

Mint láthatjuk, csak egyszer hívták. Az érték első alkalommal nem került gyorsítótárba, mivel azt még ki kellett számítani. Másodszor az előző hívásnál tárolták, így elkerülhettük az általános hívást slowMethod () újra.

2.3. A gyorsítótár frissítése

A gyorsítótár egy másik gyakori problémája a gyorsítótár frissítése. Bár a legnehezebb szempont a tudás mikor a gyorsítótár frissítéséhez egy másik tud hogyan.

Megoldása hogyan A. használata egyszerű CacheLoader. A LoadingCache egyszerűen fel kell hívni minden frissítendő értékre. Próbáljuk ki ezt egy teszttel:

Karakterlánc értéke = loadingCache.get ("kulcs"); loadingCache.refresh ("kulcs"); assertThat (callCount) .isEqualTo (2); assertThat (érték) .isEqualTo ("kulcs");

Ellentétben a későbbi felhívásainkkal get (), frissítés () kényszeríteni fogja a CacheLoader hogy újra felhívják, ügyelve arra, hogy értékeink naprakészek legyenek.

3. Következtetés

Ebben a cikkben elmagyaráztuk, hogyan lehet a LoadingCache használja a CacheLoader a gyorsítótár kihagyások és a gyorsítótár frissítések értékeinek kiszámításához. Érdemes megnézni ezt a mélyebb cikket is a Guava Cachingről.

Ezeknek a példáknak a megvalósítása megtalálható a GitHub oldalon. Ez egy Maven projekt, ezért könnyen futtathatónak kell lennie.