Ställer in caching
Låt oss gå tillbaka till våra cachningsinställningar i filen hibernate.cfg.xml:
<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"/>
Var uppmärksam på den första raden - den innehåller namnet på cachingmotorklassen. Hibernate implementerar faktiskt inte cachning internt, istället tillhandahåller det en uppsättning gränssnitt som du kan implementera din egen cachingmotor med.
Populära implementeringar inkluderar:
- EHCache
- OSCache
- SwarmCache
- JBoss TreeCache
EHCache
Den kan cachelagras i minnet eller på disken, såväl som i klustercachelagring, och stöder även en valfri cache med frågeresultat från Hibernate.
OSCache
Stöder minne och diskcache i samma JVM med en rik uppsättning utgångspolicyer och stöd för frågecache.
SwarmCache
Clustercache baserat på JGroups. Den använder klustrad ogiltigförklaring men stöder inte frågecachen för viloläge.
JBoss Cache
En helt transaktionell replikerad klustrad cache, också baserad på JGroups multicast-bibliotek. Den stöder replikering eller ogiltigförklaring, synkron eller asynkron kommunikation och optimistisk och pessimistisk låsning. Viloläge frågecache stöds.
Dessa motorer stöder inte alla parallella åtkomststrategier. Den faktiska situationen beskrivs i tabellen nedan:
Strategi/leverantör | Skrivskyddad | icke-strikt läs-skriv | läsa skriva | transaktionella |
---|---|---|---|---|
EHCache | X | X | X | |
OSCache | X | X | X | |
SwarmCache | X | X | ||
JBoss Cache | X | X |
EHCache-konfigurationsexempel
EHCache -motorn har sin egen konfigurationsfil som heter ehcache.xml. Det ungefärliga innehållet i en sådan fil:
<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"
/>
Här kan du konfigurera cachinginställningar både generellt och för varje enhet separat. Läs mer i den officiella dokumentationen .
Analys av cachningsstatistik
Du kan också behöva kontrollera hur väl cachningsmekanismen är konfigurerad. Hibernate tillhandahåller ett speciellt statistikobjekt specifikt för detta.
Exempel:
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);
Vi kommer inte att gå in på detaljer om detta, eftersom det kommer att dröja många år till innan du får slut på vanliga cachelösningar och behöver förbättra dem manuellt. Förresten, den här kommentaren kan ha hämtats från ett liknande fall:
// 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