2011-10-25 13 views
5

La pregunta lo dice todo, me gustaría utilizar CacheBuilder, pero mis valores se extraen de forma asíncrona. Esto funcionó previamente con MapMaker ya que el CacheLoader no era un requisito. Ahora me gustaría saber si puedo hackear esto o si hay alternativas no desaprobadas. Gracias.¿Cómo alguien usa el CacheLoader de Guava de forma asíncrona

+2

La pregunta realmente no lo dice todo. ¿Podría explicar más claramente lo que estaba haciendo y por qué Cache no funcionará para usted? – ColinD

+1

Supongo que estaba usando 'MapMaker' para hacer un' ConcurrentMap' no computable, que luego rellenaría a través de 'map.put'. En Guava 10.0.1, puede hacer esto con un 'Cache' usando' cache.asMap(). Put' – Ray

+0

@ColinD: El problema aquí es que necesito extraer un conjunto de datos de forma asíncrona como un agujero antes de poder configure la caché, la informática requiere el conjunto de agujeros, no puedo usar la caché a petición de esta manera. –

Respuesta

5

Creo que la pregunta que intentas hacer es "¿Cómo puedo usar CacheBuilder sin tener que especificar un CacheLoader?" Si ese es el caso, entonces habrá soporte para esto en la versión 11.0 de Guava. Mientras tanto, un método de aumento() en CacheLoader ya está marcada en el tronco (a partir de esta mañana):

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilder.html

+0

Sí, específicamente en un proceso en el que los datos se recuperan de forma asíncrona, lo que todavía considero un caso de uso válido. Gracias por su entrada. –

+0

Ah, si lo que quieres es un CacheLoader asíncrono, entonces eso es algo de lo que estamos hablando, pero no sucederá pronto ... – fry

1

Un método sería hacer con los parámetros genéricos K y V como sus salidas deseadas:

LoadingCache<K, ListenableFuture<V>> values = CacheBuilder.newBuilder() 
    .build(
     new CacheLoader<K, ListenableFuture<V>>() { 
     public ListenableFuture<V> load(K key) { 
      /* Get your future */ 
     } 
     }); 
Cuestiones relacionadas