Úvod do Guava CacheLoader

1. Úvod

V tomto článku si predstavíme Guavu CacheLoader.

Pred ďalším čítaním sa odporúča základné porozumenie LoadingCache trieda prvá. Je to preto, lebo CacheLoader konkrétne s tým pracuje.

V podstate CacheLoader je funkcia používaná na výpočet hodnoty v prípade, že sa nenájde na Guave LoadingCache.

2. Pomocou a CacheLoader S LoadingCache

Ak existuje vyrovnávacia pamäť, chýbajte s LoadingCache, alebo je potrebné aktualizovať vyrovnávaciu pamäť, CacheLoader sa použije na výpočet hodnôt. To pomáha zapuzdriť našu logiku ukladania do pamäte cache na jednom mieste, čím sa náš kód stáva súdržnejším.

2.1. Maven závislosť

Najprv pridajme našu závislosť Maven:

 com.google.guava guava 29.0-jre 

Najnovšiu verziu nájdete v úložisku Maven.

2.2. Hodnoty výpočtu a ukladania do pamäte cache

Teraz sa pozrime, ako môžeme vytvoriť inštanciu a LoadingCache s CacheLoader:

LoadingCache loadingCache = CacheBuilder.newBuilder () .build (nový CacheLoader () {@Override verejné načítanie reťazcov (konečné reťazce) vyvolá výnimku {return slowMethod (s);}});

V podstate LoadingCache zavolá náš inline CacheLoader kedykoľvek je potrebné vypočítať hodnotu, ktorá nebola uložená do pamäte cache. Skúsme spočítať, koľkokrát je naše slowMethod () sa volá, keď niečo načítame z medzipamäte viackrát:

Reťazcová hodnota = loadingCache.get ("kľúč"); hodnota = loadingCache.get ("kľúč"); assertThat (callCount) .isEqualTo (1); assertThat (hodnota) .isEqualTo ("expectValue"); 

Ako vidíme, volalo sa iba raz. Prvýkrát sa hodnota neuložila do pamäte cache, pretože sa ešte musela vypočítať. Druhýkrát to bolo uložené v pamäti z predchádzajúceho hovoru, takže sme sa mohli vyhnúť réžii volania našich slowMethod () ešte raz.

2.3. Obnovuje sa vyrovnávacia pamäť

Ďalším častým problémom pri ukladaní do pamäte cache je obnovenie pamäte cache. Aj keď najťažším aspektom je vedieť kedy na obnovenie vyrovnávacej pamäte vie ďalší ako.

Riešenie ako je jednoduchý pri použití CacheLoader. The LoadingCache jednoducho ju vyvolá pre každú hodnotu, ktorú je potrebné aktualizovať. Skúsme to s testom:

Reťazcová hodnota = loadingCache.get ("kľúč"); loadingCache.refresh ("kľúč"); assertThat (callCount) .isEqualTo (2); assertThat (hodnota) .isEqualTo ("kľúč");

Na rozdiel od našich nasledujúcich výziev na číslo get (), refresh () prinúti CacheLoader znovu zavolať a uistiť sa, že naše hodnoty sú aktuálne.

3. Záver

V tomto článku sme vysvetlili, ako a LoadingCache používa a CacheLoader aby bolo možné vypočítať hodnoty pri vynechaní pamäte cache a tiež pri aktualizáciách pamäte cache. Tiež stojí za to pozrieť si tento podrobnejší článok o ukladaní do vyrovnávacej pamäte Guava.

Implementáciu týchto príkladov možno nájsť na GitHub. Toto je projekt Maven, takže by mal byť ľahko spustiteľný tak, ako je.


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