Inleiding tot Guava CacheLoader

1. Inleiding

In dit artikel introduceren we de Guava CacheLoader.

Voordat u verder leest, wordt aanbevolen dat u een basiskennis heeft van de LoadingCache klasse eerst. Dit komt doordat de CacheLoader werkt er specifiek mee.

In wezen is het CacheLoader is een functie die wordt gebruikt voor het berekenen van een waarde in het geval dat deze niet in een Guava wordt gevonden LoadingCache.

2. Met behulp van een CacheLoader Met een LoadingCache

Als er een cache-misser is met een LoadingCache, of de cache moet worden vernieuwd, de CacheLoader wordt gebruikt voor het berekenen van waarden. Dit helpt om onze caching-logica op één plek samen te vatten, waardoor onze code meer samenhangt.

2.1. Afhankelijkheid van Maven

Laten we eerst onze Maven-afhankelijkheid toevoegen:

 com.google.guava guave 29.0-jre 

Je kunt de nieuwste versie vinden in de Maven-repository.

2.2. Waarden voor computergebruik en caching

Laten we nu eens kijken hoe we een LoadingCache met een CacheLoader:

LoadingCache loadingCache = CacheBuilder.newBuilder () .build (nieuwe CacheLoader () {@Override public String load (laatste String s) genereert Uitzondering {return slowMethod (s);}});

In wezen is het LoadingCache zal onze inline bellen CacheLoader telkens wanneer het een waarde moet berekenen die niet in de cache is opgeslagen. Laten we proberen te tellen hoe vaak onze slowMethod () wordt aangeroepen wanneer we iets meerdere keren uit de cache halen:

Stringwaarde = loadingCache.get ("key"); waarde = loadingCache.get ("sleutel"); assertThat (callCount) .isEqualTo (1); assertThat (waarde) .isEqualTo ("verwachteValue"); 

Zoals we kunnen zien, werd het maar één keer gebeld. De eerste keer dat de waarde niet in de cache was opgeslagen omdat deze nog moest worden berekend. De tweede keer was het in de cache van de vorige oproep, dus we konden de overhead van onze slowMethod () opnieuw.

2.3. De cache vernieuwen

Een ander veelvoorkomend probleem met caching is het vernieuwen van de cache. Hoewel het moeilijkste aspect weten is wanneer om de cache te verversen, weet een ander hoe.

Het oplossen van het hoe is eenvoudig bij gebruik van de CacheLoader. De LoadingCache zal het eenvoudig aanroepen voor elke waarde die moet worden vernieuwd. Laten we dit proberen met een test:

Stringwaarde = loadingCache.get ("key"); loadingCache.refresh ("sleutel"); assertThat (callCount) .isEqualTo (2); assertThat (waarde) .isEqualTo ("sleutel");

In tegenstelling tot onze volgende oproepen naar get (), vernieuwen () zal de CacheLoader opnieuw gebeld te worden en ervoor te zorgen dat onze waarden up-to-date zijn.

3. Conclusie

In dit artikel hebben we uitgelegd hoe a LoadingCache wordt gebruikt door a CacheLoader om waarden te berekenen voor cache-missers, en ook voor cache-vernieuwingen. Het is ook de moeite waard om dit meer diepgaande artikel over Guava Caching te lezen.

De implementatie van deze voorbeelden is te vinden op GitHub. Dit is een Maven-project, dus het zou gemakkelijk moeten zijn zoals het is.