2012-07-13 22 views
10

Dado un caché de Guava creado con el siguiente código, ¿hay un tamaño máximo de caché si no se establece uno?¿Cuál es el tamaño máximo predeterminado para un caché de Google Guava?

LoadingCache<String, String> loadingCache = CacheBuilder.newBuilder().build(new CacheLoader<String, String>() { 
    @Override 
    public String load(String key) throws Exception 
    { 
     return key.toUpperCase(); 
    } 
}); 

En mi caso, realmente quiero un caché sin límite superior de tamaño. Estoy usando la memoria caché para almacenar permisos para los usuarios que hayan iniciado sesión y desalojaré los elementos de la memoria caché al finalizar la sesión o el vencimiento de la sesión.

Respuesta

22

El caché por defecto es ilimitada: como el javadoc for CacheBuilder explica

Estas características son opcionales

y

Por instancias de memoria caché por defecto creadas por CacheBuilder no realizará ningún tipo de desalojo.

+0

Muchas gracias por el enlace, ayer descubrí acerca de la guayaba y han sido muchas las pestañas abiertas en mi navegador que intentaban resolverlo. – ams

+0

¿Suprimieron la sección relativa al valor predeterminado de 'maximumSize'? No puedo encontrar ninguna mención de ello en los javadocs más nuevos, p. http://google.github.io/guava/releases/23.6-jre/api/docs/com/google/common/cache/CacheBuilder.html – Henrik

+0

@Henrik nunca ha habido una sección en un valor 'maximumSize' predeterminado: como implicado por "Estas características son todas opcionales", y más explícitamente con "Por defecto, las instancias de caché creadas por' CacheBuilder' no realizarán ningún tipo de desalojo ", no existe _no_ valor predeterminado, por lo tanto, no hay desalojo. –

3

La respuesta simple es sin límite, si su "valor predeterminado" es CacheBuilder.maximumSize() nunca se llama.

Y no creo que su aplicación necesite una estrategia de desalojo basada en el tamaño. Cuando las sesiones de usuario caducan, simplemente elimínelas de la memoria caché (Cache.invalidate(key)).

Y la mayúscula de String no necesita memoria caché, llamar mayúsculas directamente es mucho más fácil y efectivo que la caché.

Cuestiones relacionadas