2013-10-31 13 views
5

Mi piacerebbe usare le guaiave CacheBuilder, ma non riesco a trovare alcun esempio esplicito su come implementarlo.Come usare guava CacheBuilder?

La documentazione affermano il seguente codice:

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

Domanda: che cosa è questo metodo createExpensiveGraph(key)? È un metodo che restituisce una mappatura HashMap<Key, Value>? Cosa devo fare con il valore key?

Oppure posso anche solo restituire un List<String> in questo metodo senza dover utilizzare il valore key in alcun modo?

+0

Vedere l'api di CacheLoader e caricare il metodo che fornisce un chiaro significato del motivo per cui viene utilizzato il metodo? http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheLoader.html#load(K) createExpensiveGraph non restituisce hashMap restituisce invece un oggetto di Graph. –

+0

È qualsiasi funzione tu stia cercando di memorizzare nella cache il risultato di. –

risposta

17

L'idea della cache è che di solito si hanno questo problema:

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

più i soliti problemi di sincronizzazione che si hanno quando si utilizza questo codice in un ambiente multi-threaded.

Guava fa il boilerplate per te; devi solo implementare createNewGraph(). Il modo in cui Java funziona, questo significa che devi implementare un'interfaccia. In questo caso, l'interfaccia è CacheLoader.

Se si pensa che l'intera cache sia un po 'come una mappa, quindi CacheLoader è una richiamata che viene richiamata ogni volta che non è possibile trovare una chiave nella mappa. Il caricatore otterrà la chiave (perché di solito contiene informazioni utili per creare l'oggetto che è previsto per questa chiave) e restituirà il valore che get() dovrebbe tornare in futuro.

Problemi correlati