2011-09-30 12 views
9

Sono un po 'confuso da CacheBuilder e Cache introdotto in Guava 10. La documentazione suggerisce che è possibile overwrite values ma per quanto posso dire, Cache non contiene alcun metodo per farlo. Qualche idea?Come inserire valori() nella classe cache di Guava?

Sto provando a costruire una mappa che scade una chiave 10 secondi dopo la sua ultima lettura o scrittura. Quando viene rilevato un valore, mi aspetto che venga restituito il valore impostato in precedenza o che venga calcolato un valore predefinito se non esiste nessuno.

NOTA: questa domanda è obsoleta. Sebbene Javadoc sopra riportato mostri l'esistenza di un metodo Cache.put(K key, V value), non esiste quando la domanda è stata pubblicata per la prima volta.

risposta

6

Da molto tempo, c'è Cache#asMap restituendo una vista ConcurrentMap.

AFAIK, non ancora. Ma c'è un thread ricordare che Cache.asMap.put è prevista per il rilascio 11.

Direi che la corrente vecchio stato della Javadoc è un residuo se in cui il metodo cache-impostazione s' evoluzione dal MapMaker il CacheBuilder (sono attualmente deprecati).

Sto provando a costruire una mappa che scade una chiave 10 secondi dopo la sua ultima lettura o scrittura. Quando viene rilevato un valore, mi aspetto che venga restituito il valore impostato in precedenza o che venga calcolato un valore predefinito se non esiste nessuno.

Utilizzando expireAfterAccess(10, TimeUnit.SECONDS) manterrà una voce in vita per 10 secondi dopo qualsiasi accesso ad esso. E gli unici valori che otterrai saranno quelli calcolati dal tuo CacheLoader (o prima o durante lo get).

+3

Guava 10.0.1 avrebbe dovuto risolvere questo problema. http://groups.google.com/group/guava-discuss/browse_thread/thread/f01f7583bb4422d7 – jvdneste

3

Aggiornamento minore. Cache.asMap().put() dovrebbe presentarsi in Guava 10.1 durante la prima settimana di ottobre 2011. Vedi this thread per maggiori informazioni.

Problemi correlati