Úvod do Ehcache

1. Prehľad

V tomto článku si predstavíme Ehcache, široko používanú open-source cache založenú na prostredí Java. Obsahuje pamäte a disky, poslucháčov, načítavače vyrovnávacej pamäte, RESTful a SOAP API a ďalšie veľmi užitočné funkcie.

Aby sme ukázali, ako môže ukladanie do vyrovnávacej pamäte optimalizovať našu aplikáciu, vytvoríme jednoduchú metódu, ktorá bude počítať štvorcové hodnoty poskytnutých čísel. Pri každom hovore bude metóda volať countSquareOfNumber (int cislo) metóda a tlač informačnej správy na konzolu.

Na tomto jednoduchom príklade chceme ukázať, že výpočet štvorcových hodnôt sa vykonáva iba raz a každé ďalšie volanie s rovnakou vstupnou hodnotou vracia výsledok z medzipamäte.

Je dôležité si uvedomiť, že sa sústredíme výlučne na samotnú Ehcache (bez jari); Ak sa chcete presvedčiť, ako Ehcache funguje s jarou, prečítajte si tento článok.

2. Maven závislosti

Aby sme mohli používať Ehcache, musíme pridať túto závislosť Maven:

 org.ehcache ehcache 3.1.3 

Najnovšiu verziu artefaktu Ehcache nájdete tu.

3. Konfigurácia medzipamäte

Ehcache je možné nakonfigurovať dvoma spôsobmi:

  • Prvý spôsob je cez Java POJO, kde sú všetky konfiguračné parametre konfigurované prostredníctvom Ehcache API
  • Druhým spôsobom je konfigurácia pomocou XML súboru, kde môžeme nakonfigurovať Ehcache podľa poskytnutej definície schémy

V tomto článku si ukážeme oba prístupy - konfiguráciu Java aj XML.

3.1. Konfigurácia Java

Táto podkapitola ukáže, aké ľahké je nakonfigurovať Ehcache s POJO. Tiež vytvoríme triedu pomocníka pre ľahšiu konfiguráciu a dostupnosť cache:

verejná trieda CacheHelper {private CacheManager cacheManager; private Cache squareNumberCache; public CacheHelper () {cacheManager = CacheManagerBuilder .newCacheManagerBuilder (). build (); cacheManager.init (); squareNumberCache = cacheManager .createCache ("squaredNumber", CacheConfigurationBuilder .newCacheConfigurationBuilder (Integer.class, Integer.class, ResourcePoolsBuilder.heap (10))); } verejná medzipamäť getSquareNumberCacheFromCacheManager () {návrat cacheManager.getCache ("squaredNumber", Integer.class, Integer.class); } // štandardní zakladatelia a zakladatelia}

Ak chcete inicializovať našu vyrovnávaciu pamäť, najskôr musíme definovať Ehcache CacheManager objekt. V tomto príklade vytvárame predvolenú medzipamäť štvorcové číslo “ s newCacheManagerBuilder () API.

Vyrovnávacia pamäť sa jednoducho zmapuje Celé číslo kľúče k Celé číslo hodnoty.

Všimnite si, ako predtým, ako začneme používať definovanú vyrovnávaciu pamäť, musíme inicializovať CacheManager objekt s init () metóda.

Nakoniec môžeme na získanie našej medzipamäti použiť getCache () API s poskytnutým názvom, kľúčom a hodnotou typov našej medzipamäte.

Pomocou týchto pár riadkov sme vytvorili našu prvú medzipamäť, ktorá je teraz k dispozícii pre našu aplikáciu.

3.2. Konfigurácia XML

Konfiguračný objekt z pododdielu 3.1. sa rovná použitiu tejto konfigurácie XML:

 java.lang.Integer java.lang.Integer 10 

A aby sme mohli zahrnúť túto cache do našej Java aplikácie, musíme si prečítať XML konfiguračný súbor v Java:

URL myUrl = getClass (). GetResource (xmlFile); XmlConfiguration xmlConfig = nový XmlConfiguration (myUrl); CacheManager myCacheManager = CacheManagerBuilder .newCacheManager (xmlConfig);

4. Test ehcache

V časti 3. sme si ukázali, ako môžete definovať jednoduchú cache pre vaše účely. Aby sme ukázali, že ukladanie do vyrovnávacej pamäte skutočne funguje, vytvoríme SquaredCalculator trieda, ktorá bude počítať štvorcovú hodnotu poskytnutého vstupu a vypočítanú hodnotu uloží do medzipamäte.

Samozrejme, ak medzipamäť už obsahuje vypočítanú hodnotu, vrátime hodnotu uloženú v pamäti a vyhneme sa zbytočným výpočtom:

verejná trieda SquaredCalculator {súkromná vyrovnávacia pamäť CacheHelper; public int getSquareValueOfNumber (int input) {if (cache.getSquareNumberCache (). containsKey (input)) {return cache.getSquareNumberCache (). get (input); } System.out.println ("Výpočet štvorcovej hodnoty" + vstup + "a výsledok ukladania do pamäte cache."); int squaredValue = (int) Math.pow (vstup, 2); cache.getSquareNumberCache (). put (input, squaredValue); return squaredValue; } // štandardné getre a settery; }

Na dokončenie nášho testovacieho scenára budeme potrebovať aj kód, ktorý bude počítať štvorcové hodnoty:

@Test public void whenCalculatingSquareValueAgain_thenCacheHasAllValues ​​() {for (int i = 10; i <15; i ++) {assertFalse (cacheHelper.getSquareNumberCache (). ContainsKey (i)); System.out.println ("Štvorcová hodnota" + i + "je:" + squaredCalculator.getSquareValueOfNumber (i) + "\ n"); } for (int i = 10; i <15; i ++) {assertTrue (cacheHelper.getSquareNumberCache (). containsKey (i)); System.out.println ("Štvorcová hodnota" + i + "je:" + squaredCalculator.getSquareValueOfNumber (i) + "\ n"); }}

Ak spustíme náš test, dostaneme tento výsledok v našej konzole:

Výpočet štvorcovej hodnoty 10 a výsledok ukladania do pamäte cache. Štvorcová hodnota 10 je: 100 Výpočet štvorcovej hodnoty 11 a výsledok ukladania do pamäte cache. Štvorcová hodnota 11 je: 121 Výpočet štvorcovej hodnoty 12 a výsledok ukladania do pamäte cache. Druhá mocnina 12 je: 144 Výpočet druhej mocniny hodnoty 13 a výsledok ukladania do pamäte cache. Štvorcová hodnota 13 je: 169 Výpočet štvorcovej hodnoty 14 a výsledok ukladania do pamäte cache. Štvorcová hodnota 14 je: 196 Štvorcová hodnota 10 je: 100 Štvorcová hodnota 11 je: 121 Štvorcová hodnota 12 je: 144 Štvorcová hodnota 13 je: 169 Štvorcová hodnota 14 je: 196

Ako si môžete všimnúť, vypočítať () metóda robila výpočty iba pri prvom hovore. Pri druhom volaní sa všetky hodnoty našli v pamäti cache a vrátili sa z nej.

5. Ďalšie možnosti konfigurácie Ehcache

Keď sme v predchádzajúcom príklade vytvorili našu vyrovnávaciu pamäť, bola to jednoduchá vyrovnávacia pamäť bez akýchkoľvek špeciálnych možností. Táto časť zobrazuje ďalšie možnosti, ktoré sú užitočné pri vytváraní vyrovnávacej pamäte.

5.1. Perzistencia disku

Ak je do medzipamäte príliš veľa hodnôt na uloženie, môžeme niektoré z týchto hodnôt uložiť na pevný disk.

PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder () .with (CacheManagerBuilder.persistence (getStoragePath () + File.separator + "squaredValue")) .withCache ("persistent-cache", CacheConferbader, cache. .newResourcePoolsBuilder () .heap (10, EntryUnit.ENTRIES) .disk (10, MemoryUnit.MB, true))) .build (true); persistentCacheManager.close ();

Namiesto predvoleného nastavenia CacheManager, teraz používame PersistentCacheManager ktoré uchová všetky hodnoty, ktoré sa nedajú uložiť do pamäte.

Z konfigurácie vidíme, že vyrovnávacia pamäť ušetrí 10 prvkov do pamäte a na pevný disk pridelí 10 MB pre vytrvalosť.

5.2. Vypršanie platnosti údajov

Ak ukladáme veľa údajov do medzipamäte, je prirodzené, že údaje v pamäti ukladáme po určitý čas, aby sme sa vyhli veľkému využitiu pamäte.

Ehcache kontroluje aktuálnosť údajov Vypršanie platnosti rozhranie:

CacheConfiguration cacheConfiguration = CacheConfigurationBuilder .newCacheConfigurationBuilder (Integer.class, Integer.class, ResourcePoolsBuilder.heap (100)) .withExpiry (Expirations.timeToLiveExpiration (Duration.of (60, TimeUnit.SECON)

V tejto vyrovnávacej pamäti budú všetky údaje aktívne 60 sekúnd a po uplynutí tejto doby budú z pamäte odstránené.

6. Záver

V tomto článku sme si ukázali, ako používať jednoduché ukladanie do vyrovnávacej pamäte Ehcache v aplikácii Java.

V našom príklade sme videli, že aj jednoducho nakonfigurovaná vyrovnávacia pamäť môže ušetriť veľa zbytočných operácií. Ukázali sme tiež, že cache môžeme konfigurovať prostredníctvom POJO a XML a že Ehcache má celkom pekné funkcie - napríklad vytrvalosť a vypršanie platnosti údajov.

Ako vždy, kód z tohto článku nájdete na GitHub.


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