Introduktion til Guava CacheLoader

1. Introduktion

I denne artikel introducerer vi Guava CacheLoader.

Før du læser videre, anbefales det, at der er en grundlæggende forståelse af LoadingCache klasse først. Dette skyldes, at CacheLoader arbejder specifikt med det.

I det væsentlige er den CacheLoader er en funktion, der bruges til at beregne en værdi, hvis den ikke findes i en Guava LoadingCache.

2. Brug af en CacheLoader Med en LoadingCache

Når der er en cache-miss med en LoadingCache, eller cachen skal opdateres, CacheLoader vil blive brugt til beregning af værdier. Dette hjælper med at indkapsle vores cachelogik ét sted, hvilket gør vores kode mere sammenhængende.

2.1. Maven afhængighed

Lad os først tilføje vores Maven-afhængighed:

 com.google.guava guava 29.0-jre 

Du kan finde den nyeste version i Maven-arkivet.

2.2. Beregnings- og cachingværdier

Lad os nu se, hvordan vi kan instantiere en LoadingCache med en CacheLoader:

LoadingCache loadingCache = CacheBuilder.newBuilder () .build (ny CacheLoader () {@ Overstyr offentlig strengbelastning (sidste streng) kaster Undtagelse {return slowMethod (s);}});

I det væsentlige er den LoadingCache vil kalde vores inline CacheLoader når det er nødvendigt at beregne en værdi, der ikke er cachelagret. Lad os prøve at tælle hvor mange gange vores slowMethod () kaldes, når vi henter noget fra cachen flere gange:

Strengværdi = loadingCache.get ("nøgle"); værdi = loadingCache.get ("nøgle"); assertThat (callCount) .isEqualTo (1); assertThat (værdi) .isEqualTo ("forventet værdi"); 

Som vi kan se, blev det kun kaldt en gang. Første gang blev værdien ikke cachelagret, da den endnu ikke var beregnet. Anden gang blev det cachelagret fra det forrige opkald, så vi kunne undgå omkostningerne ved at ringe til vores slowMethod () igen.

2.3. Opfriskning af cachen

Et andet almindeligt problem med cache er at opdatere cachen. Selvom det sværeste aspekt er at kende hvornår for at opdatere cachen, ved en anden hvordan.

Løsning af hvordan er simpelt, når du bruger CacheLoader. Det LoadingCache vil ganske enkelt påkalde det for hver værdi, der skal opdateres. Lad os prøve dette med en test:

Strengværdi = loadingCache.get ("nøgle"); loadingCache.refresh ("nøgle"); assertThat (callCount) .isEqualTo (2); assertThat (værdi) .isEqualTo ("nøgle");

I modsætning til vores efterfølgende opkald til få (), opdater () vil tvinge CacheLoader at blive kaldt igen og sørge for, at vores værdier er opdaterede.

3. Konklusion

I denne artikel har vi forklaret, hvordan en LoadingCache bruges af en CacheLoader for at beregne værdier på cache-savner og også på cache opdateres. Det er også værd at tjekke denne mere detaljerede artikel om Guava Caching.

Implementeringen af ​​disse eksempler findes på GitHub. Dette er et Maven-projekt, så det skal være let at køre som det er.


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