2012-04-13 5 views

risposta

45

membro del team Guava qui.

L'implementazione Guava Cache scade le voci nel corso delle normali operazioni di manutenzione, che si verificano su una base per segmento durante le operazioni di scrittura della cache e occasionalmente durante le operazioni di lettura della cache. Le voci di solito non sono scadute allo esattamente la loro data di scadenza, solo perché Cache prende la decisione deliberata di non creare il proprio thread di manutenzione, ma piuttosto di consentire all'utente di decidere se è necessaria una manutenzione continua.

Mi concentrerò su expireAfterAccess, ma la procedura per expireAfterWrite è quasi identica. In termini di meccanica, quando si specifica expireAfterAccess nello CacheBuilder, ciascun segmento della cache gestisce una coda di accesso all'elenco collegato per le voci in ordine dall'accesso meno recente all'accesso più recente. Le voci della cache sono in realtà essi stessi nodi nell'elenco collegato, quindi quando si accede a una voce, si rimuove dalla sua vecchia posizione nella coda di accesso e si sposta alla fine della coda.

Quando viene eseguita la manutenzione della cache, tutta la cache deve fare scadere ogni voce nella parte anteriore della coda finché non trova una voce non scaduta. Questo è semplice e richiede un sovraccarico relativamente piccolo e si verifica nel corso della normale manutenzione della cache. (Inoltre, la cache limita deliberatamente la quantità di lavoro svolto in una singola operazione di pulizia, riducendo al minimo la spesa per qualsiasi operazione di cache singola.) In genere, il costo della manutenzione della cache è dominato dalle spese di calcolo delle voci effettive nella cache.

+0

+1 ... Grazie mille per la spiegazione e grazie mille per Guava. La lista collegata "trucco" è molto bella! Sto installando Guava subito: grazie alla tua risposta dettagliata ora sono venduta su Guava:) –

+3

Charles Fry ha dato un'ottima presentazione su MapMaker/CacheBuilder a Strange Loop. Il talk è disponibile [su InfoQ] (http://www.infoq.com/presentations/Concurrent-Caching-at-Google) –

+0

utilizzare un Datastructure diverso da LinkedList potrebbe in qualche modo aiutare a migliorare il processo di sfratto? – asgs

Problemi correlati