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
GO TO FULL VERSION