कैशिंग की स्थापना

आइए 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"/>

पहली पंक्ति पर ध्यान दें - इसमें कैशिंग इंजन वर्ग का नाम है। हाइबरनेट वास्तव में कैशिंग को आंतरिक रूप से लागू नहीं करता है, इसके बजाय यह इंटरफेस का एक सेट प्रदान करता है जिसके साथ आप अपने स्वयं के कैशिंग इंजन को लागू कर सकते हैं।

लोकप्रिय कार्यान्वयन में शामिल हैं:

  • EHCache
  • OSCache
  • झुंड कैश
  • जेबॉस ट्री कैश

EHCache

इसे मेमोरी या डिस्क पर, साथ ही क्लस्टर कैशिंग में कैश किया जा सकता है, और हाइबरनेट क्वेरी परिणामों के वैकल्पिक कैश का भी समर्थन करता है।

OSCache

समाप्ति नीतियों और क्वेरी कैश समर्थन के समृद्ध सेट के साथ एक ही JVM में मेमोरी और डिस्क कैशिंग का समर्थन करता है।

झुंड कैश

JGroups पर आधारित क्लस्टर कैश। यह संकुल अमान्यता का उपयोग करता है लेकिन हाइबरनेट क्वेरी कैश का समर्थन नहीं करता है।

जेबॉस कैश

JGroups मल्टीकास्ट लाइब्रेरी पर आधारित एक पूरी तरह से लेन-देन प्रतिकृति क्लस्टर कैश। यह प्रतिकृति या अमान्यता, तुल्यकालिक या अतुल्यकालिक संचार और आशावादी और निराशावादी लॉकिंग का समर्थन करता है। हाइबरनेट क्वेरी कैश समर्थित है।

ये इंजन सभी समांतर पहुंच रणनीतियों का समर्थन नहीं करते हैं। वास्तविक स्थिति नीचे दी गई तालिका में वर्णित है:

रणनीति/प्रदाता केवल पढ़ने के लिए गैर-सख्त पठन-पाठन पढ़ना लिखना लेन-देन संबंधी
EHCache एक्स एक्स एक्स
OSCache एक्स एक्स एक्स
झुंड कैश एक्स एक्स
जेबॉस कैश एक्स एक्स

EHCache कॉन्फ़िगरेशन उदाहरण

EHCache इंजन की अपनी कॉन्फ़िगरेशन फ़ाइल है जिसे ehcache.xml कहा जाता है। ऐसी फ़ाइल की अनुमानित सामग्री:

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

यहां आप कैशिंग सेटिंग्स को सामान्य रूप से और प्रत्येक इकाई के लिए अलग-अलग कॉन्फ़िगर कर सकते हैं। आधिकारिक दस्तावेज में और पढ़ें ।

कैशिंग आँकड़ों का विश्लेषण

आपको यह जांचने की भी आवश्यकता हो सकती है कि कैशिंग तंत्र कितनी अच्छी तरह कॉन्फ़िगर किया गया है। हाइबरनेट विशेष रूप से इसके लिए एक विशेष सांख्यिकी वस्तु प्रदान करता है।

उदाहरण:

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

हम इसके बारे में विस्तार में नहीं जाएंगे, क्योंकि आपके पास मानक कैशिंग समाधान समाप्त होने और उन्हें मैन्युअल रूप से सुधारने की आवश्यकता होने से पहले कई और वर्ष लगेंगे। वैसे, यह टिप्पणी एक ऐसे ही मामले से निकाली गई हो सकती है:

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