Progettazione di una Guava LoadingCache con scadenza voce variabile

2022-07-29 12:30:45

Sto usando LoadingCache di Guava nel mio progetto per gestire il caricamento della cache thread-{safe,friendly} e funziona meravigliosamente bene. Tuttavia, c'è una limitazione.

Il codice corrente che definisce la cache è simile al seguente:

cache = CacheBuilder.newBuilder().maximumSize(100L).build(new CacheLoader<K, V>()
{
    // load() method implemented here
}

Non specifico un tempo di scadenza.

Il problema è che in base ai valori della chiave, alcuni valori associati potrebbero scadere e altri no. E CacheLoader non tiene conto di questo, se specifichi un tempo di scadenza, è per ogni singola voce.

Come affronteresti questo problema?

- fge

Source
Risposta


31
  • Un'altra alternativa è ExpiringMap, che supporta la scadenza delle voci variabili:

    Map<String, String> map = ExpiringMap.builder().variableExpiration().build();
    map.put("foo", "bar", ExpirationPolicy.ACCESSED, 5, TimeUnit.MINUTES);
    map.put("baz", "pez", ExpirationPolicy.CREATED, 10, TimeUnit.MINUTES);