2010-05-06 8 views
9

मैं ऐसी सेवा बना रहा हूं जिसमें डेटाबेस तक केवल पढ़ने के लिए पहुंच हो। मेरे पास सेवा को तेज करने के लिए हाइबरनेट में एक क्वेरी कैश और दूसरा स्तर कैश सक्षम (READ_ONLY मोड) है, क्योंकि तालिकाओं का उपयोग शायद ही कभी किया जा रहा है।हाइबरनेट क्वेरी कैश स्वचालित रूप से बाहरी अपडेट पर रीफ्रेश हो गया है?

मेरा सवाल यह है कि, यदि कोई डीबी में जाता है और मैन्युअल रूप से टेबल को बदलता है (यानी हाइबरनेट के बाहर), क्या कैश स्वचालित रूप से पहचानता है कि इसे साफ़ करने की आवश्यकता है? क्या कैश पर समय सीमा है?

उत्तर

7

नहीं, अंतर्निहित डेटा में परिवर्तन होने पर कैश आपके लिए डेटाबेस को स्कैन करने वाला नहीं है। परिवर्तन जो एल 2 कैश के माध्यम से नहीं आते हैं, इसमें दिखाई नहीं देंगे। समय निकालने में कितना समय लगता है आदि आपके प्रदाता पर निर्भर करता है और जो भी डिफ़ॉल्ट सेटिंग्स हैं। ऐसा लगता है कि डिफ़ॉल्ट ehcache.xml 2 मिनट के लिए है।

7

यदि आप अपने परिवर्तन करने के लिए हाइबरनेट एपीआई से नहीं जाते हैं, तो दूसरे-स्तर-कैश को अधिसूचित नहीं किया जाएगा और परिवर्तन दिखाई नहीं देंगे। इस स्थिति से निपटने का सामान्य तरीका रीफ्रेश को मजबूर करने के लिए प्रोग्रामिक रूप से द्वितीय-स्तर-कैश से संबंधित वस्तुओं को बेदखल करना है। SessionFactory ऐसा करने की अनुमति देने वाली विधियां प्रदान करता है। अनुभाग प्रलेखन के 19.3. Managing the caches से:

दूसरे स्तर कैश के लिए, वहाँ तरीकों एक उदाहरण, पूरी क्लास, संग्रह उदाहरण या पूरे संग्रह भूमिका की कैश्ड राज्य हटाना उतना के लिए SessionFactory पर परिभाषित कर रहे हैं।

sessionFactory.evict(Cat.class, catId); //evict a particular Cat 
sessionFactory.evict(Cat.class); //evict all Cats 
sessionFactory.evictCollection("Cat.kittens", catId); //evict a particular 
                 //collection of kittens 
sessionFactory.evictCollection("Cat.kittens"); //evict all kitten collections 
+0

एक वेब अनुप्रयोग में, समय के बिंदु पर/क्या स्थिति के आधार पर, निष्कासन के लिए इस कोड को कहा जाएगा? क्या आप एक व्यावहारिक परिदृश्य दे सकते हैं? – user104309

संबंधित मुद्दे