A gyorsítótár beállítása

Térjünk vissza a hibernate.cfg.xml fájl gyorsítótárazási beállításaihoz:

<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.SingletEhCacheProvider"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="true"/>

Ügyeljen az első sorra - ez tartalmazza a gyorsítótárazási motorosztály nevét. A Hibernate valójában nem valósítja meg a gyorsítótárazást belsőleg, ehelyett olyan interfészeket biztosít, amelyekkel megvalósíthatja saját gyorsítótár-motorját.

A népszerű megvalósítások a következők:

  • EHCache
  • OSCache
  • SwarmCache
  • JBoss TreeCache

EHCache

Gyorsítótárban tárolható a memóriában vagy a lemezen, valamint a fürt gyorsítótárban, és támogatja a hibernált lekérdezések eredményeinek opcionális gyorsítótárát is.

OSCache

Támogatja a memória és a lemez gyorsítótárazását ugyanabban a JVM-ben, gazdag lejárati házirendekkel és lekérdezési gyorsítótár támogatással.

SwarmCache

JGroups alapú fürt gyorsítótár. Fürtös érvénytelenítést használ, de nem támogatja a hibernált lekérdezési gyorsítótárat.

JBoss gyorsítótár

Teljesen tranzakciós replikált fürtözött gyorsítótár, amely szintén a JGroups multicast könyvtáron alapul. Támogatja a replikációt vagy érvénytelenítést, a szinkron vagy aszinkron kommunikációt, valamint az optimista és pesszimista zárolást. A hibernált lekérdezési gyorsítótár támogatott.

Ezek a motorok nem támogatnak minden párhuzamos hozzáférési stratégiát. A tényleges helyzetet az alábbi táblázat írja le:

Stratégia/szolgáltató Csak olvasható nem szigorú írás-olvasás ír olvas tranzakciós
EHCache x x x
OSCache x x x
SwarmCache x x
JBoss gyorsítótár x x

EHCache konfigurációs példa

Az EHCache motornak saját konfigurációs fájlja van, az ehcache.xml. Egy ilyen fájl hozzávetőleges tartalma:

<diskStore path="java.io.tmpdir"/>

<defaultCache
    maxElementsInMemory = "1000"
    eternal = "false"
    timeToIdleSeconds = "120"
    timeToLiveSeconds = "120"
    overflowToDisk = "true"
/>

<cache name = "Employee"
    maxElementsInMemory = "500"
    eternal = "true"
    timeToIdleSeconds = "0"
    timeToLiveSeconds = "0"
    overflowToDisk = "false"
/>

Itt konfigurálhatja a gyorsítótárazási beállításokat általánosságban és minden entitáshoz külön-külön. Bővebben a hivatalos dokumentációban .

Gyorsítótárazási statisztikák elemzése

Előfordulhat, hogy ellenőriznie kell, hogy a gyorsítótárazási mechanizmus mennyire van konfigurálva. A Hibernate egy speciális statisztikai objektumot biztosít kifejezetten erre a célra.

Példa:

Statistics statistics = session.getSessionFactory().getStatistics();
CacheRegionStatistics cacheStatistics = statistics.getDomainRegionStatistics(“com.codegym.employee”);

long hitCount = cacheStatistics.getHitCount();
long missCount = cacheStatistics.getMissCount();
double hitRatio = (double) hitCount / (hitCount + missCount);

Ezt nem részletezzük, mert még sok évnek kell eltelnie, amíg kifogynak a szabványos gyorsítótárazási megoldások, és manuálisan kell javítania azokat. Ez a komment egyébként egy hasonló esetből származhatott:

// Dear programmer:
// When you're done "optimizing" this routine
// and realize how big of a mistake it was to do this,
// please increment the counter at the bottom as a warning
// for the next guy:
// number_of_hours_spent_here = 42