Uvod u Guava CacheLoader

1. Uvod

U ovom ćemo članku predstaviti Guavu CacheLoader.

Prije daljnjeg čitanja, preporučuje se osnovno razumijevanje LoadingCache razred prvo. To je zato što CacheLoader posebno radi s tim.

U osnovi, CacheLoader je funkcija koja se koristi za izračunavanje vrijednosti u slučaju da ona nije pronađena u Guavi LoadingCache.

2. Korištenje a CacheLoader S LoadingCache

Kada se propusti predmemorija s a LoadingCache, ili je potrebno osvježiti predmemoriju, CacheLoader koristit će se za izračunavanje vrijednosti. To pomaže ujediniti logiku predmemoriranja na jednom mjestu, čineći naš kod složnijim.

2.1. Ovisnost Mavena

Prvo, dodajmo našu ovisnost o Mavenu:

 com.google.guava guava 29,0-jre 

Najnoviju verziju možete pronaći u spremištu Maven.

2.2. Vrijednosti računanja i keširanja

Sada, da vidimo kako možemo napraviti instancu a LoadingCache s CacheLoader:

LoadingCache loadingCache = CacheBuilder.newBuilder () .build (novi CacheLoader () {@Override javno učitavanje niza (završni niz) baca izuzetak {return slowMethod (s);}});

U osnovi, LoadingCache nazvat će naš inline CacheLoader kad god treba izračunati vrijednost koja nije predmemorirana. Pokušajmo izbrojati koliko je puta naš slowMethod () poziva se kada više puta dohvatimo nešto iz predmemorije:

Vrijednost niza = loadingCache.get ("ključ"); value = loadingCache.get ("ključ"); assertThat (callCount) .isEqualTo (1); assertThat (vrijednost) .isEqualTo ("očekivana vrijednost"); 

Kao što vidimo, pozvan je samo jednom. Prvi put vrijednost nije bila predmemorirana jer je tek trebala biti izračunata. Drugi je put predmemoriran iz prethodnog poziva, kako bismo mogli izbjeći općenite pozive slowMethod () opet.

2.3. Osvježavanje predmemorije

Još jedan uobičajeni problem predmemoriranja je osvježavanje predmemorije. Iako je najteži aspekt znati kada za osvježavanje predmemorije zna još jedan kako.

Rješavanje kako je jednostavno kada se koristi CacheLoader. The LoadingCache jednostavno će ga pozvati za svaku vrijednost koju treba osvježiti. Pokušajmo ovo s testom:

Vrijednost niza = loadingCache.get ("ključ"); loadingCache.refresh ("ključ"); assertThat (callCount) .isEqualTo (2); assertThat (value) .isEqualTo ("key");

Za razliku od naših kasnijih poziva na get (), osvježi () prisilit će CacheLoader biti pozvani ponovno, vodeći računa da su naše vrijednosti ažurne.

3. Zaključak

U ovom smo članku objasnili kako a LoadingCache koristi a CacheLoader kako bi se izračunale vrijednosti za propuste predmemorije, a također i za osvježavanja predmemorije. Također vrijedi pogledati ovaj detaljniji članak o Guava Cachingu.

Implementacija ovih primjera može se naći na GitHubu. Ovo je Maven projekt, pa bi ga trebalo biti lako pokrenuti kakav jest.


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