2011-10-25 10 views
5

का उपयोग कैसे करता है सवाल यह है कि मैं कैशबिल्डर का उपयोग करना चाहता हूं, लेकिन मेरे मान अतुल्यकालिक रूप से खींचे जाते हैं। यह पहले MapMaker के साथ काम करता था क्योंकि कैशलोडर की आवश्यकता नहीं थी। अब मैं जानना चाहता हूं कि क्या मैं इसे हॅक कर सकता हूं या यदि कोई गैर बहिष्कृत विकल्प हैं। धन्यवाद।कोई व्यक्ति गुवा के कैशलोडर को असीमित रूप से

+2

प्रश्न वास्तव में यह सब नहीं कहता है। क्या आप स्पष्ट रूप से समझा सकते हैं कि आप क्या कर रहे थे और क्यों कैश आपके लिए काम नहीं करेगा? – ColinD

+1

मुझे लगता है कि आप गैर-कंप्यूटिंग 'ConcurrentMap' बनाने के लिए' MapMaker' का उपयोग कर रहे थे, जिसे आप 'map.put' के माध्यम से पॉप्युलेट करेंगे। गुवा 10.0.1 में, आप इसे 'कैश.एएसएपीएपी) का उपयोग कर' कैश 'के साथ कर सकते हैं। – Ray

+0

@ कोलिन डी: यहां समस्या यह है कि मुझे डेटा के एक सेट को अतुल्यकालिक रूप से एक छेद के रूप में खींचने की आवश्यकता है कैश सेट अप करें, कंप्यूटिंग को छेद सेट की आवश्यकता है, मैं इस तरह की मांग पर कैश का उपयोग नहीं कर सकता। –

उत्तर

5

मुझे लगता है कि आप जिस प्रश्न को पूछने की कोशिश कर रहे हैं वह है "मैं कैशबिल्डर को कैशलोडर निर्दिष्ट किए बिना कैसे उपयोग कर सकता हूं?" यदि ऐसा है, तो इसके लिए अमरूद रिलीज 11.0 में इसका समर्थन होगा। इस बीच में CacheLoader पर निर्माण() विधि को पहले से ही (आज सुबह के रूप में) ट्रंक में चेक किया गया है:

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html

+0

हां, विशेष रूप से ऐसी प्रक्रिया में जहां डेटा को अतुल्यकालिक रूप से पुनर्प्राप्त किया जाता है जिसे मैं अभी भी एक वैध उपयोग केस मानता हूं। आपके इनपुट के लिए धन्यवाद। –

+0

ओह, यदि आप चाहते हैं कि एक एसिंक्रोनस कैशलोडर है, तो यह कुछ है जिसके बारे में हम बात कर रहे हैं, लेकिन यह जल्द ही कभी नहीं होगा ... – fry

1

एक विधि अपने वांछित आउटपुट के रूप में साथ सामान्य मापदंडों कश्मीर और वी बनाने के लिए होगा:

LoadingCache<K, ListenableFuture<V>> values = CacheBuilder.newBuilder() 
    .build(
     new CacheLoader<K, ListenableFuture<V>>() { 
     public ListenableFuture<V> load(K key) { 
      /* Get your future */ 
     } 
     });