2013-10-31 5 views
5

मैं guavas CacheBuilder का उपयोग करना चाहता हूं, लेकिन यह कोई स्पष्ट उदाहरण नहीं मिल सकता है कि इसे कैसे कार्यान्वित किया जाए।अमरूद कैशबिल्डर का उपयोग कैसे करें?

डॉक्स राज्य निम्नलिखित कोड:

LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() 
     .maximumSize(1000) 
     .build(
      new CacheLoader<Key, Graph>() { 
      public Graph load(Key key) throws AnyException { 
       return createExpensiveGraph(key); 
      } 
      }); 

प्रश्न: क्या इस createExpensiveGraph(key) विधि है? क्या यह एक तरीका है जो HashMap<Key, Value> मानचित्रण देता है? मुझे key मान के साथ क्या करना है?

या क्या मैं key वैल्यू का उपयोग किसी भी तरीके से नहीं करने के लिए इस विधि में List<String> वापस कर सकता हूं?

Graph get(Key key) { 
    Graph result = get(key); 
    if(null == result) { 
     result = createNewGraph(key); 
     put(key, result); 
    } 
    return result; 
} 

प्लस सामान्य तुल्यकालन मुद्दों है कि आप जब आप एक मल्टी-थ्रेडेड वातावरण में इस कोड का उपयोग करें:

+0

कैशलोडर और लोड विधि का एपीआई देखें जो विधि का उपयोग क्यों किया जाता है इसका स्पष्ट अर्थ देता है? http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheLoader.html#load(K) createExpensiveGraph हैश मैप वापस नहीं करता है इसके बजाय ग्राफ़ की ऑब्जेक्ट लौटाता है। –

+0

यह वही कार्य है जिसका आप परिणाम कैश करने की कोशिश कर रहे हैं। –

उत्तर

17

कैश का विचार है कि आप आमतौर पर इस समस्या है।

अमरूद आपके लिए बॉयलरप्लेट करता है; आपको बस createNewGraph() लागू करना होगा। जिस तरह जावा काम करता है, इसका मतलब है कि आपको एक इंटरफ़ेस लागू करना होगा। इस मामले में, इंटरफ़ेस CacheLoader है।

यदि आपको लगता है कि पूरा कैश मानचित्र की तरह थोड़ा है, तो CacheLoader एक कॉलबैक है जो किसी भी कुंजी को मानचित्र में नहीं मिल सकता है। लोडर को कुंजी मिल जाएगी (क्योंकि इसमें आमतौर पर इस कुंजी के लिए अपेक्षित ऑब्जेक्ट बनाने के लिए उपयोगी जानकारी होती है) और यह उस मूल्य को वापस कर देगा जो get() भविष्य में वापस आना चाहिए।

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