2012-06-13 10 views
6

में मौजूद कुंजियों को कैसे संभालना है, मैं डेटाबेस डेटा के इन-मेमोरी कैश को लागू करने के लिए CacheBuilder और LoadingCache का उपयोग कर रहा हूं।गुवा लोडिंग कैश - बैकिंग स्टोर

मान लीजिए कि क्लाइंट किसी आइटम के लिए कैश से पूछताछ करता है जो बैकिंग स्टोर में मौजूद नहीं है। मैं क्लाइंट को यह जानना चाहता हूं कि निर्दिष्ट कुंजी के लिए कोई डेटा नहीं मिला। इसे संभालने के लिए सबसे अच्छा तरीका क्या है?

  • कैश में विशेष मान स्टोर करें जो "डेटा नहीं" दर्शाता है।
  • कैश में कुछ भी स्टोर न करें और अपवाद बढ़ाएं।
  • अन्य विचार?
+3

अच्छा ... क्या यह एक असाधारण स्थिति का प्रतिनिधित्व करता है, या यह आपके कार्यक्रम में एक सामान्य घटना है? यदि पहला, अपवाद फेंक दो, यदि दूसरा, एक विशेष मूल्य स्टोर करें। –

+0

मैंने कुछ हद तक अनिच्छुक रूप से लुई के मामलों के बाद में 'वैकल्पिक' का उपयोग किया है। – Ray

+0

मेरे मामले में, "कोई डेटा" सार्थक नहीं है। प्रारंभ में, मैंने कैश में शून्य को स्टोर करने का प्रयास किया, जो 'अवैध कैशलोड लोड अपवाद' के कारण विफल रहा। सुझाव के लिए धन्यवाद, रे। यहां कुछ अच्छी जानकारी भी मिली: http://stackoverflow.com/questions/8298285/handle-null-value-using-guava-mapmaker-cachebuilder – frankadelic

उत्तर

9

मैंने हमेशा इसे निम्न तरीके से हल किया है।

interface KeyValueService<K,V> { 
    V get(K key); 
} 

class CachingKeyValueService<K,V> { 
    Cache<K,Optional<V>> cache; 
    V get(K key) { 
     return cache.get(key).orNull(); 
    } 

} 

आदर्श रूप में आप इंटरफ़ेस बदल जाएगा KeyValueService हमेशा वैकल्पिक वापस जाने के लिए के लिए, लेकिन कभी कभी संभव नहीं thats।

आप सभी वैकल्पिक .ABSENT संदर्भों को तुरंत बेदखल करने के लिए भार का उपयोग कर सकते हैं।

+0

मुझे नहीं लगता कि आप वैकल्पिक का उपयोग करने के लिए वजन का उपयोग कर सकते हैं। ABSENT को निष्कासित किया जाना चाहिए जल्दी जल्दी। कैशबिल्डर डॉक्स से: "वजन का उपयोग केवल यह निर्धारित करने के लिए किया जाता है कि कैश क्षमता से अधिक है या नहीं, इसका चयन करने पर कोई प्रभाव नहीं पड़ता कि कौन सी प्रविष्टि को अग्रेषित किया जाना चाहिए"। – frankadelic

+0

आप सही हैं कि यह चयन में सहायता नहीं करता है, हालांकि एक बार जब यह बेदखल हो जाता है तो यह वजन घटाने तक बेदखल रहेगा, अगर आप वैकल्पिक बनाते हैं। नियमित वस्तु से कम वजन कम करें, तो उन्हें अधिमान्य रूप से बेदखल कर दिया जाएगा बेदखल चक्र मानक एलआरयू नियम अभी भी पाठ्यक्रम पर लागू होते हैं। – Emily

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