Estoy usando el segundo nivel de caché y el caché de consultas. ¿Sé cómo limpiar programáticamente todas las cachés?¿Cómo borrar todo el caché de Hibernate (ehcache) usando Spring?
Respuesta
Para borrar la caché de sesión utilizar session.clear()
Para borrar la caché utilización segundo nivel this code snippet
Si enchufa terracota, también tiene la capacidad de ejecutar el Dev consola de terracota que puede inspeccionar estadísticas sobre la caché, encienda y apague la caché, y borre los contenidos de la caché de la interfaz de usuario.
Esta funcionalidad también está disponible en los beans JMX.
El fragmento de código se indica en la respuesta Bozho está en desuso en hibernación 4.
De acuerdo con Hibernate JavaDoc, puede utilizar org.hibernate.Cache.evictAllRegions()
:
datos Expulsar de todas las regiones de la consulta.
Uso de la API:
Session session = sessionFactory.getCurrentSession();
if (session != null) {
session.clear(); // internal cache clear
}
Cache cache = sessionFactory.getCache();
if (cache != null) {
cache.evictAllRegions(); // Evict data from all query regions.
}
Alternativamente, puede borrar todos los datos de un ámbito específico:
org.hibernate.Cache.evictCollectionRegions()
org.hibernate.Cache.evictDefaultQueryRegion()
org.hibernate.Cache.evictEntityRegions()
org.hibernate.Cache.evictQueryRegions()
org.hibernate.Cache.evictNaturalIdRegions()
Es posible que desee comprobar the JavaDoc for hibernate Cache interface (Hibernate 4.3).
Y también, second-level cache eviction de hibernate dev guide (4.3).
Quiero borrar los datos de caché de la memoria caché de segundo nivel llamando al siguiente método: - sessionFactory.getCache(). EvictEntityRegions(); Solo quiero saber si hay algún daño al hacer esto? Por ejemplo: - ¿Qué pasará si trato de borrar el caché en medio de la transacción? –
Supongo que depende de su estrategia de almacenamiento en caché y su proveedor. Es posible que deba probarlo con el elegido. El documento de referencia describe las diferentes configuraciones. – Dino
Estoy usando @Cache (usage = CacheConcurrencyStrategy.READ_WRITE). Tengo un caso. Supongamos que se está ejecutando alguna transacción para obtener datos y que la memoria caché de segundo nivel tiene datos en ese momento. Al mismo tiempo, otro hilo expulsa todos los cachés de región mientras que la transacción anterior aún no se ha completado. Entonces, ¿qué pasará en este caso? ¿Puedo obtener un valor nulo de la memoria caché en esa transacción y se producirá un hit db? ¿Hay alguna posibilidad de que surja algún problema? –
se puede ir con esto también
request.getSession().invalidate();
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
HttpSession e hibernate session son cosas diferentes. –
Si desea borrar segundo caché de nivel, utilice la API sessionFactory.evictEntity(entityName)
Código:
/**
* Evicts all second level cache hibernate entites. This is generally only
* needed when an external application modifies the database.
*/
public void evict2ndLevelCache() {
try {
Map<String, ClassMetadata> classesMetadata = sessionFactory.getAllClassMetadata();
for (String entityName : classesMetadata.keySet()) {
logger.info("Evicting Entity from 2nd level cache: " + entityName);
sessionFactory.evictEntity(entityName);
}
} catch (Exception e) {
logger.logp(Level.SEVERE, "SessionController", "evict2ndLevelCache", "Error evicting 2nd level hibernate cache entities: ", e);
}
}
Para más detalles sobre la memoria caché nivel 2 refer
- 1. Spring: hibernate + ehcache
- 2. Invalidación de caché en Ehcache
- 3. Spring, JPA (Hibernate) y Ehcache degradación de las prestaciones
- 4. ¿Caché de NoSQL o Ehcache?
- 5. Cómo borrar todo el segundo nivel de caché en NHibernate
- 6. Cómo borrar el ehcache sin reinicio del servidor
- 7. Configuración de EHCache para Spring3.1.1 e Hibernate
- 8. Minificar, ¿cómo borrar el caché?
- 9. caché de bastidor de raíles - cómo borrar manualmente todo el caché
- 10. Hibernate + EhCache = java.io.NotSerializableException
- 11. servidor de caché centralizado. (Ehcache o Hazelcast)
- 12. Cómo habilitar el registro de Ehcache
- 13. hibernate de segundo nivel ehcache miss
- 14. Borrar el caché de Magento
- 15. Cómo borrar caché de Smarty
- 16. Cómo borrar todo el caché al usar el decorador page_cache de django
- 17. EhCache + Hibernate Cache no está vivo
- 18. Cómo borrar el caché de Eclipse Indigo
- 19. Cómo borrar el caché de HttpWebRequest
- 20. Transacción anidada usando Spring e Hibernate
- 21. Hibernate caché de segundo nivel
- 22. ¿Cómo borrar el caché en Solr?
- 23. Obteniendo una instancia de EhCache con Spring ... inteligentemente
- 24. cómo borrar el caché en gwt?
- 25. WebApp Session Management usando Ehcache
- 26. ¿Cómo debo usar las anotaciones @CachePut y @CacheEvict con ehCache (ehCache 2.4.4, Spring 3.1.1)
- 27. Borrar todo/Inserción masiva
- 28. java.lang.NoClassDefFoundError: org/hibernate/cache/EntityRegion configurando EHCache
- 29. Ehcache caché por defecto en Java
- 30. Hibernate/Ehcache: colecciones de desalojo de la memoria caché de segundo nivel no sincronizadas con otras lecturas DB
Para las versiones modernas de Hibernate, sería mejor seguir el @ dino's responder. – JorgeHortelano