Nyetel caching

Ayo bali menyang setelan caching ing file 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"/>

Pay manungsa waé menyang baris pisanan - ngandhut jeneng kelas engine caching. Hibernate ora bener ngleksanakake caching internal, nanging menehi sakumpulan antarmuka sing sampeyan bisa ngleksanakake mesin caching dhewe.

Implementasi populer kalebu:

  • EHCache
  • OSCache
  • SwarmCache
  • JBoss TreeCache

EHCache

Bisa di-cache ing memori utawa ing disk, uga ing cache kluster, lan uga ndhukung cache opsional saka asil pitakon Hibernate.

OSCache

Ndhukung memori lan disk caching ing JVM padha karo pesawat sugih saka kabijakan kadaluwarsa lan dhukungan cache query.

SwarmCache

Cluster cache adhedhasar JGroups. Iki nggunakake invalidasi clustered nanging ora ndhukung cache query Hibernate.

JBoss Cache

Cache clustered replikasi transaksional kanthi lengkap, uga adhedhasar perpustakaan multicast JGroups. Ndhukung replikasi utawa invalidation, komunikasi sinkron utawa asinkron, lan kunci optimistis lan pesimis. Cache query hibernate didhukung.

Mesin iki ora ndhukung kabeh strategi akses paralel. Kahanan sing nyata diterangake ing tabel ing ngisor iki:

Strategi / Panyedhiya Namung diwaca maca-nulis non-ketat maca-nulis transaksional
EHCache X X X
OSCache X X X
SwarmCache X X
JBoss Cache X X

Conto konfigurasi EHCache

Mesin EHCache duwe file konfigurasi dhewe sing diarani ehcache.xml. Isi kira-kira file kasebut:

<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"
/>

Ing kene sampeyan bisa ngatur setelan caching ing umum lan kanggo saben entitas kanthi kapisah. Waca liyane ing dokumentasi resmi .

Analisis statistik cache

Sampeyan bisa uga kudu mriksa carane uga mekanisme caching diatur. Hibernate nyedhiyakake obyek Statistik khusus khusus kanggo iki.

Tuladha:

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);

Kita ora bakal njlentrehake kanthi rinci babagan iki, amarga bakal pirang-pirang taun sadurunge sampeyan kehabisan solusi caching standar lan kudu nambah kanthi manual. Miturut cara, komentar iki bisa uga dijupuk saka kasus sing padha:

// 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