Sto usando il LoadingCache di Guava nel mio progetto per gestire il caricamento della cache thread- {safe, friendly} e funziona meravigliosamente bene. Tuttavia, c'è una limitazione.Progettazione di una cache di caricamento Guava con scadenza variabile
Il codice corrente che definisce la cache assomiglia a questo:
cache = CacheBuilder.newBuilder().maximumSize(100L).build(new CacheLoader<K, V>()
{
// load() method implemented here
}
io non specificano un tempo di scadenza.
Il problema è che in base ai valori della chiave, alcuni valori associati possono scadere e altri no. E CacheLoader
non tiene conto di questo, se si specifica un tempo di scadenza, è per ogni voce.
Come affronteresti questo problema?
Perché non utilizzare 2 cache: una con scadenza, un altro per gli enti eterni? – hoaz
Poiché la scadenza della voce è completamente casuale (ovvero, considera HTTP con diverse intestazioni 'Cache-Control'). – fge
Quindi suggerisco di includere il tempo di scadenza direttamente nella classe di voce e di rimuoverlo manualmente dalla cache se è scaduto immediatamente dopo averlo prelevato dalla cache. – hoaz