2012-08-06 12 views
6

Estoy usando Spring3.1 en Env independiente. Estoy almacenando en caché mi entrada usando la anotación @Cachable.Cómo iterar en entradas de caché

A veces tengo que repetir en la lista de almacenamiento en caché para obtener valor específico (sin clave).

Así que logré recuperar la lista en caché, pero ¿cómo podría iterar en sus elementos.

private ClientDTO getClientDTOByClientId(Integer clientId) 
{ 

    Cache clientCache = null; 
    try 
    { 
     clientCache = ehCacheCacheManager.getCache("client"); 

      //need here to iterate on clientCache. how? 


    } 
    catch (Exception e) 
    { 
     log.error("Couldnt retrieve client from cache. clientId=" + clientId); 
    } 
    return clientDTO; 
} 

I utilizando el mecanismo ehcache.

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" 
     p:cache-manager-ref="ehcache" /> 

    <bean id="ehcache" 
     class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
     p:config-location="classpath:ehcache.xml" /> 

gracias, ray.

Respuesta

12

CacheManager.getCache() devuelve un net.sf.ehcache.Cache, que tiene un método getKeys() que devuelve una lista de claves de caché que puede iterar. Para recuperar el objeto real que se ha almacenado (a diferencia del net.sf.ehcache.Element ajustado), use Element.getObjectValue().

EDITAR: De acuerdo con Spring it doesn't look like they will ever support Cache.getKeys(), por lo que tendrá que emitir al proveedor subyacente.

Algo como esto: Método

public boolean contains(String cacheName, Object o) { 
    net.sf.ehcache.EhCache cache = (net.sf.ehcache.EhCache) org.springframework.cache.CacheManager.getCache(cacheName).getNativeCache(); 
    for (Object key: cache.getKeys()) { 
    Element element = cache.get(key); 
    if (element != null && element.getObjectValue().equals(o)) { 
     return true; 
    } 
    } 
    return false; 
} 
+2

pero no tengo cache.getKeys(). Estoy usando org.springframework.cache.Cache – rayman

+0

¿Encontró alguna solución? Cómo iterar sobre la memoria caché infinispan. Necesito llaves. –

+1

¿Echaste al proveedor subyacente? –

Cuestiones relacionadas