प्रस्तावना
मैं तुम्हें, एक सत्र प्रबंधन कार्यान्वयन पहला चेक के रूप में ehcache उपयोग करने के लिए अगर आप किसी भी संयोग से एक पहले से ही प्रदान की जाती है, और शायद बेहतर अनुकूल सत्र कार्यान्वयन नहीं उपयोग कर सकते हैं रंदा कर रहे हैं। यदि आप एक वेब कंटेनर या एक पूर्ण fleshed जेईई सर्वर का उपयोग कर रहे हैं, तो आप वास्तव में यह पहली
क्यों ठीक है कोशिश करनी चाहिए। आप यह सुनिश्चित कर रहे हैं कि यह सही आसान तरीका न करें। यहां कुछ संकेत दिए गए हैं, आप सत्रों के लिए ehCache का उपयोग क्यों कर सकते हैं
- आपकी सेवा किसी उपयोगकर्ता सर्वर/वेब कंटेनर का हिस्सा नहीं है।
- आपकी सेवा स्टेटलेस है लेकिन समय-समय पर, आपको राज्यों (फ्रेमवर्क कोड) की आवश्यकता है।
- आप और अलग-अलग ग्राहक के बीच प्रॉक्सी की वजह से आप कॉल को अलग नहीं कर सकते हैं, उदाहरण के लिए आप किसी सेवा/सेवा के लिए किसी प्रकार का मिडलवेयर हैं जो डिफॉल्ट डेटा को डिफॉल्ट के रूप में प्रदान नहीं करता है, लेकिन उपयोगकर्ता आईडी या सत्र आईडी पैरामीटर का उपयोग करता है लेकिन गठबंधन नहीं ।
- आपने अभी आरटीएफएम नहीं किया है और इसे अपना रास्ता बनाना चाहते हैं।
1 के लिए कृपया जांचें, अगर जेटी जैसे वेब कंटेनर एक विकल्प है। आप निश्चित रूप से पूरे सत्र की वेब पहुंच का उपयोग करते हैं जो आपके लिए पॉप अप नहीं करेगा।
2 के लिए कृपया जांचें, अगर Apache Shiro आप जो चाहते हैं वह नहीं करेंगे। यदि नहीं, तो ehCache आपका मित्र हो सकता है।
3 के लिए ... क्लब में आपका स्वागत है।
4 के लिए ... अच्छा मुझे लगता है कि अगर आपने मैन्युअल नहीं पढ़ा है, तो आप इसे भी नहीं पढ़ पाएंगे।
कैसे आप उपयोग कर ehcache आश्वासन कृपया है कि आपके डेटा serializable है एक सत्र प्रबंधन लागू करना चाहते हैं
करने के लिए। यह समस्याओं को कम करेगा और आपको ehCache की संवेदनशील विशेषताओं का उपयोग करने देगा। अर्थात् डिस्क पर दृढ़ता, कैशिंग नोड्स, इससे पुनर्प्राप्त, और इसी तरह। सभी सत्रों के लिए
Do हर सत्र के लिए एक कैश का उपयोग नहीं है, लेकिन एक कैश। sessionId
आपके कैश की कुंजी है, और एक मान Map
पर जा रहे हैं। समरूपता के बारे में मत भूलना (AJAX कॉल के बारे में सोचें)। java.util.concurrent
से ConcurrentHashMap
का उपयोग करना सबसे अच्छा हो सकता है। लेकिन शायद आप Dr Heinz M. Kabutz हैं और इसे करने के लिए एक कूलर तरीका भी ढूंढें।
मुझे भंडारण में रखने के लिए तत्वों की मात्रा के बजाय आकार का उपयोग करने के लिए बहुत उपयोगी पाया गया। आपको पता नहीं हो सकता है कि बाद में कौन सा डेटा/objets संग्रहीत किया जाता है। एक दृढ़ता रणनीति निर्धारित करने के लिए मत भूलना। मैं यहाँ अस्थायी फ़ोल्डर में भंडारण का उपयोग किया।
<?xml version="1.0" encoding="UTF-8"?>
<ehcache
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd"
updateCheck="true"
monitoring="autodetect"
dynamicConfig="true">
<diskStore path="java.io.tmpdir"/>
<cache name="vocCache"
eternal="false"
maxElementsInMemory="100MB"
maxElementsOnDisk="1GB"
timeToIdleSeconds="3600"
timeToLiveSeconds="0"
memoryStoreEvictionPolicy="LRU"
diskExpiryThreadIntervalSeconds="60">
<persistence strategy="localTempSwap" />
</cache>
क्योंकि हम एक सत्र प्रबंधक लागू करना चाहते हैं, हम timeToLiveSeconds
के बारे में परेशान नहीं है। एक निश्चित निष्क्रिय समय के बाद सत्र का समय समाप्त हो गया। इसलिए हम तत्व को अधिकतम ttl में बाध्य नहीं करते हैं, लेकिन तत्व को समय निकालने के लिए timeToIdleSeconds
का उपयोग करें। timeToIdleSeconds
और timeToLiveSeconds
से परेशान न करें क्योंकि आप बाद में जोड़ने के लिए तत्वों को विशिष्ट मान सेट कर सकते हैं।
निष्कासन
एक समाप्ति समय पर ध्यान दें। एक कॉन्फ़िगर किए गए समय के कारण स्मृति में एक तत्व को कभी भी बेदखल नहीं किया जाएगा। मेमोरी तब तक बढ़ेगी जब तक परिभाषित मेमोरी बाधा हिट न हो जाए। इसलिए यदि आप 100 तत्वों को परिभाषित करते हैं, यदि 101 तत्व जोड़ा गया है, तो memoryStoreEvictionPolicy
ट्रिगर होगा और एक तत्व होगा - इस कॉन्फ़िगरेशन में - डिस्क पर flushed (ehCache 2.2)। डिस्क संग्रहण के लिए, समाप्ति समय (diskExpiryThreadIntervalSeconds
) के लिए एक थ्रेड जांच होगी। documentation देखें। इसलिए आपको यह सुनिश्चित करने के लिए isExpired()
का उपयोग करके कैश से पुनर्प्राप्त तत्व को जांचना होगा कि यह समाप्त नहीं हुआ है।
तो अंत में, आप कुछ इस तरह से खत्म हो जाएगा:
प्राप्त
Cache cache = CacheManager.getInstance().getCache(CACHE_NAME);
Element elem = cache.get(identifier);
if (elem == null)
{
throw new SessionNotFoundException(identifier);
}
if (elem.isExpired())
{
throw new SessionExpiredException(identifier);
}
return elem.getObjectValue();
PUT
Cache cache = CacheManager.getInstance().getCache(CACHE_NAME);
// We use ttl = 0 and tti=<ttlInMinutes>, because session timeout is based on session idle timout.
element = new Element(identifier, new SessionElement(), Boolean.FALSE, (int) (timeToLive/VALUE_MS), 0);
cache.put(element);
हाय Ramki मैं भी कोशिश कर रहा हूँ ehcache को लागू करने के लिए आपके पास कोई अच्छा दिशानिर्देश हो सकता है या उसके लिए ट्यूटोरियल यदि ऐसा है तो कृपया मुझे इसका लिंक प्रदान करें। –
हाय आप किस एप्लिकेशन सर्वर का उपयोग कर रहे हैं? –