2012-07-25 9 views
5

गूगल अमरूद कैश प्रलेखन राज्यों:Google Guava कैश को कैसे संभाल लें अपवाद ताज़ा करें?

ताज़ा किया जा रहा बेदखली के रूप में काफी समान नहीं है। जैसा कि लोडिंग कैश.फ्रेश (के) में निर्दिष्ट है, कुंजी को रीफ्रेश करना कुंजी के लिए एक नया मान संभवतः असीमित रूप से लोड करता है। पुराने मूल्य (यदि कोई है) अभी भी लौटाया गया है, जबकि कुंजी को ताज़ा किया जा रहा है, बेदखल के विपरीत, जो मूल्य को फिर से लोड होने तक प्रतीक्षा करने के लिए पुनर्प्राप्ति करता है।

यदि रीफ्रेशिंग के दौरान कोई अपवाद फेंक दिया जाता है, तो पुराना मान रखा जाता है, और अपवाद लॉग और निगल जाता है। क्योंकि इसका मतलब है कि अगर ताज़ा फेंकता कैश का एक अपवाद उपयोगकर्ताओं कैश में पुराना डेटा को खोजने के लिए जारी रहेगा

यह प्रवेश और अपवादों की निगलने, वास्तव में मेरे उपयोग के मामले में बुरा है।

मैं कैसे सुनिश्चित कर सकता हूं कि रीफ्रेश में अपवाद फेंक दिया गया है तो कैश शून्य या लोड विधि को कॉल करना शुरू कर देता है?

उत्तर

7

यदि आप कभी भी पुराने डेटा की सेवा नहीं करना चाहते हैं, तो आपको refresh(key) के बजाय invalidate(key) पर कॉल करना चाहिए। यह key के लिए कैश किए गए मान को छोड़ देता है, यदि कोई मौजूद है।

फिर get(key) को बाद में एक कॉल मूल्य लोडर को तुल्यकालिक प्रतिनिधि होगा और कोई भी अपवाद CacheLoader द्वारा फेंका, एक (Unchecked)ExecutionException में लिपटे rethrow होगा।

1

यदि बालों का डेटा आपके लिए एक समस्या है तो आपको यह सुनिश्चित करने के लिए expireAfterWrite का उपयोग करना चाहिए ताकि पुराना डेटा कभी नहीं दिया जा सके।

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