Keshni sozlash
Keling, hibernate.cfg.xml faylidagi kex sozlashlarimizga qaytamiz:
<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"/>
Birinchi qatorga e'tibor bering - bunda kesh dvigatelining sinf nomi berilgan. Aslida, Hibernate o'z ichida keshni amalga oshirmaydi, balki o'z kesh dvigatelini amalga oshirish uchun to'plam interfeyslarni taqdim etadi.
Ommabop amalga oshirishlaridan ba'zilari:
- EHCache
- OSCache
- SwarmCache
- JBoss TreeCache
EHCache
U xotirada yoki diskda, shuningdek klaster keshni qo'llab-quvvatlaydi va Hibernate so'rov natijalarini qo'shimcha keshlashni qo'llab-quvvatlaydi.
OSCache
Bitta JVMda xotira va diskka keshlashni qo'llab-quvvatlaydi, boyl jixatlar muddatini tugatish siyosati va so'rovlar keshini qo'llab-quvvatlaydi.
SwarmCache
JGroups asosidagi klaster kesh. U klaster qilingan bekor qilishdan foydalanadi, lekin Hibernate so'rov keshini qo'llab-quvvatlamaydi.
JBoss Cache
To'liq tranzaksiyali replikatsiyalangan klaster kesh, shuningdek, JGroups ko'p manzilli kutubxonaga asoslangan. U replikatsiya yoki bekor qilishni, sinxron yoki asinxron aloqa, shuningdek optimistik va pessimist blokirovka qo'llab-quvvatlaydi. Hibernate so'rov keshini qo'llab-quvvatlaydi.
Bu dvigatellar barcha parallel kirish strategiyalarini qo'llab-quvvatlamaydi. Haqiqiy holat quyidagi jadvalda keltirilgan:
| Strategy/Provider | Read-only | Nonstrict read-write | Read-write | Transactional |
|---|---|---|---|---|
| EHCache | X | X | X | |
| OSCache | X | X | X | |
| SwarmCache | X | X | ||
| JBoss Cache | X | X |
EHCache sozlash namunasi
EHCache dvigateli o'zining ehcache.xml deb nomlangan konfiguratsion fayliga ega. Bunday faylning taxminiy tarkibi:
<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"
/>
Bu yerda sen kesh parametrlarini umuman yoki har bir obyekt uchun alohida sozlashing mumkin. Batafsilroq rasmiy hujjatlarda o'qi.
Kesh statistikasi tahlili
Agar keshlash mexanizmi qanchalik yaxshi sozlanganligini tekshirish zaruriyati tug'ilsa, Hibernate buning uchun maxsus Statistics obyektini taqdim etadi.
Misol:
Statistics statistics = session.getSessionFactory().getStatistics();
CacheRegionStatistics cacheStatistics = statistics.getDomainRegionStatistics(“com.javarush.employee”);
long hitCount = cacheStatistics.getHitCount();
long missCount = cacheStatistics.getMissCount();
double hitRatio = (double) hitCount / (hitCount + missCount);
Biz buni batafsil ko'rib chiqmaymiz, chunki ko'p yillar o'tib, sen keshlashning standart yechimlari etarli emasligini his qilmaguningcha, ularni qo'lda yaxshilashga ehtiyoj sezilmaydi. Aytgancha, balki xuddi shunga o'xshash holatdan shu izoh olingan:
// Hurmatli dasturchi:
// Agar sen bu dastur qismida “optimallashtirish”ni tugatsang
// va buni qilish qanchalik katta xato ekanligini tushunsang,
// keyingi odamlarga ogohlantirish sifatida quyidagi hisoblagichni oshir:
// bu yerda_sarf etilgan_soatlar_soni = 42
GO TO FULL VERSION