2011-04-29 17 views
5

Estoy usando Ehcache en Hibernate.Invalidación de caché en Ehcache

¿Cómo puedo notificar a la memoria caché que la base de datos ha cambiado? ¿Cómo puedo invalidar los datos en caché? ¿Cómo puedo lograr esto programáticamente?

Respuesta

9

¿Qué significa exactamente? Hay 2 maneras de hacer un cambio en la base de datos: dentro de la aplicación & fuera de la aplicación

Dentro de la aplicación puede desencadenar fácilmente una invalidación. El segundo es más difícil de resolver. Los elementos de caché se almacenan con una clave y, en función de esa clave, puede eliminarla.

CacheManager manager = CacheManager.getInstance(); 
cache = manager.getCache(cacheName); 
cache.remove(key); 

or 

cache.removeAll(); 

Según cómo haya configurado la ehcache, por supuesto. Pero necesita saber el nombre de la memoria caché que contiene el objeto.

4

Así es como se puede invalidar todos los artículos Ehcache sin molestar a lo que los nombres de caché individuales son:

CacheManager manager = CacheManager.getInstance(); 

String[] names = manager.getCacheNames(); 

for (String name : names) 
{ 
    Cache cache = manager.getCache(name); 

    cache.removeAll(); 
} 
+2

bien esto puede haber funcionado bien en el momento de la escritura, que tenía que reemplazar [ '.getCache'] (http: //ehcache.org/apidocs/net/sf/ehcache/CacheManager.html#getCache \ (java.lang.String \)) con ['.getEhcache'] (http://ehcache.org/apidocs/net /sf/ehcache/CacheManager.html#getEhcache \ (java.lang.String \)) y ['Cache'] (http://ehcache.org/apidocs/net/sf/ehcache/Cache.html) con [ 'Ehcache'] (http://ehcache.org/apidocs/net/sf/ehcache/hibernate/EhCache.html). De lo contrario, '.getCache' devuelve' null' incluso para los cachés que existen. – moshen

+0

No funcionó para mí ya que mi configuración es [hibernate ehcache timeToLiveSeconds no funciona] (http://stackoverflow.com/q/18914668/432903) – prayagupd

1

Probar:

CacheManager.create().clearAll() 

se borrará todos los cachés en CacheManager.

Para borrar una sola cache en particular, la recibe de administrador de caché y eliminar todos los elementos:

CacheManager cacheManager = CacheManager.create(); 
Ehcache cache = cacheManager.getEhcache(cacheConfiguration.getName()); 
cache.removeAll();  
Cuestiones relacionadas