मेरे पास एक ऐसा एप्लिकेशन है जो कई फाइलें खोलना चाहता है: समय-समय पर यह क्लाइंट अनुरोध कहता है, "एक्स फ़ाइल में कुछ डेटा जोड़ें" कह रहा है, और यह फ़ाइल आदर्श रूप से पहले से खोला जा सकता है, और फ़ाइल का हेडर सेक्शन पहले से ही है पार्स किया गया, ताकि यह लिखना तेज़ हो। हालांकि, यह कई फाइलें खोलना ऑपरेटिंग सिस्टम के लिए बहुत अच्छा नहीं है, और यदि हमारे डेटा-स्टोरेज की आवश्यकता होती है तो असंभव हो सकता है।फाइल हैंडल कैश कैसे करें?
तो मैं एक "मुझे, इस फाइल को संभाल देना उद्घाटन अगर यह कैश नहीं है" समारोह, और स्वचालित रूप से जिसके लिए, कहते हैं, पांच मिनट के लिए लिखा नहीं किया गया है फ़ाइलों को बंद करने के लिए कुछ प्रक्रिया चाहते हैं। कैशिंग फ़ाइल हैंडल के विशिष्ट मामले के लिए जो छोटे स्पर्ट्स में लिखे गए हैं, यह संभवतः है, लेकिन यह एक सामान्य पर्याप्त समस्या प्रतीत होती है कि ऐसा होना चाहिए जैसे "मुझे एक्स, नामक ऑब्जेक्ट दें यदि संभव हो तो कैश से "और" अब मैं ऑब्जेक्ट एक्स के साथ किया गया है, इसलिए इसे अब से पांच मिनट बेदखल करने के लिए योग्य बनाएं "।
core.cache लगता है कि यह इस उद्देश्य के लिए उपयुक्त हो सकता है, लेकिन documentation काफी कमी है और source इसे उपयोग करने के बारे में कोई विशेष सुराग प्रदान करता है। इसका टीटीएल कैश आशाजनक दिखता है, लेकिन साथ ही साथ अस्पष्ट है कि इसका उपयोग कैसे किया जाए, वस्तुओं को बेदखल करने के लिए कचरा संग्रह पर निर्भर करता है, इसलिए जब मैं इसे समाप्त करने के लिए तैयार हूं तो मैं संसाधन को साफ़ रूप से बंद नहीं कर सकता।
मैं अपना खुद का रोल कर सकता हूं, लेकिन कई मुश्किल स्पॉट हैं और मुझे यकीन है कि मुझे कुछ चीजें कम से कम गलत मिलेंगी, इसलिए मुझे उम्मीद है कि कोई मुझे वहां के कार्यान्वयन के लिए इंगित कर सकता है यह कार्यक्षमता। मेरा कोड क्लोजर में है, लेकिन निश्चित रूप से पर जावा लाइब्रेरी का उपयोग करना बिल्कुल ठीक होगा, जहां सबसे अच्छा कार्यान्वयन मिल सकता है।
यह काफी उपयुक्त लगता है, धन्यवाद! एकमात्र चीज जिसके बारे में मुझे चिंता है, यह है कि कैश से कोई आइटम प्राप्त करना संभव है और समाप्ति समय से अधिक समय तक इसे लटका देना, सक्रिय रूप से इसका उपयोग करना। यदि समाप्ति कोड आइटम को नीचे आँसू देता है, तो यह खतरनाक हो जाता है। क्या आप कैश के "ऑब्जेक्ट को चेक आउट" करने के तरीके के बारे में जानते हैं, जैसे कि इसे वापस चेक किए जाने तक इसे तोड़ा नहीं जाएगा? – amalloy
एचएम, मुझे लगता है कि यह निर्भर करता है। क्या ऐसा हो सकता है कि आप लगातार = = 5 मिनट के लिए फ़ाइल में लिखते हैं? क्या कैश एक समय में केवल एक अनुरोध से पहुंचा है? सुनिश्चित करें कि आप यहां प्रलेखन की जांच करें: निष्कासन स्वचालित रूप से समाप्ति पर नहीं होता है, लेकिन कैश से/लिखने/लिखने के दौरान। हो सकता है कि यह अच्छा है (यदि आपके पास एक अनुरोध है जो लंबे समय तक लिख सकता है, तो इसे तोड़ा नहीं जाएगा), शायद बुरा क्योंकि क्योंकि एक समय में एक से अधिक अनुरोध हैं या आप पहले/में हैंडल साफ़ करना चाहते हैं पृष्ठभूमि ... –
यहां देखें: http://code.google.com/p/guava-libraries/wiki/CachesExplained#When_Does_Cleanup_Happen? –