我正在使用二級緩存和查詢緩存。 我可以知道如何以編程方式清除所有緩存?如何使用Spring清除所有Hibernate緩存(ehcache)?
回答
要清除會話緩存使用session.clear()
要清除二級緩存的使用this code snippet
如果您在兵馬俑堵塞,你還必須運行兵馬俑開發控制檯,它可以檢查有關統計數據的能力緩存,打開並關閉緩存,並清除用戶界面中的緩存內容。
此功能也可從JMX bean獲得。
在Bozho答覆中指出的代碼片段在Hibernate中4
據休眠的JavaDoc已被棄用,你可以使用org.hibernate.Cache.evictAllRegions()
:
逐出數據從所有查詢的區域。
使用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.
}
或者,你可以從一個特定的範圍內清除所有數據:
org.hibernate.Cache.evictCollectionRegions()
org.hibernate.Cache.evictDefaultQueryRegion()
org.hibernate.Cache.evictEntityRegions()
org.hibernate.Cache.evictQueryRegions()
org.hibernate.Cache.evictNaturalIdRegions()
你可能要檢查the JavaDoc for hibernate Cache interface (Hibernate 4.3)。
還有,來自休眠開發指南(4.3)的second-level cache eviction。
我想通過調用以下方法從二級緩存中清除緩存數據: - sessionFactory.getCache()。evictEntityRegions(); 我只是想知道,這樣做有沒有什麼壞處?例如: - 如果我嘗試清除緩存中的交易會發生什麼? –
我想這取決於你的緩存策略和提供者。您可能需要使用所選的測試它。參考文檔描述了不同的設置。 – Dino
我正在使用@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)。 我有一個case.Suppose如果一些事務正在運行,以獲取數據和二級緩存有數據在那個時候。與此同時,另一個線程在上一個事務尚未完成的同時驅逐所有區域高速緩存。那麼在這種情況下會發生什麼。我可以從該事務中的緩存中獲取null,並且會發生數據庫命中?有什麼問題嗎? –
你可以走這也
request.getSession().invalidate();
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
HttpSession和hibernate會話是不同的東西。 –
如果你想清除二級緩存,使用API sessionFactory.evictEntity(entityName)
代碼:
/**
* 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);
}
}
有關二級緩存refer更多細節
- 1. Spring Boot Hibernate Ehcache實體緩存實現
- 2. 使用Spring,Hibernate和Ehcache緩存整個數據庫
- 3. Spring + Ehcache:如何緩存查找所有結果
- 4. 如何避免在spring中使用ehCache指定所有緩存名稱?
- 5. 如何刪除的Ehcache使用Hibernate
- 6. 如何使用Cache :: FileCache清除所有緩存的對象?
- 7. Spring 3.1緩存註解EhCache
- 8. ehcache hibernate第二級緩存,hibernate自動排除
- 9. 如何清除特定的緩存區:ehcache的
- 10. 如何在spring中使用ehcache永久緩存mvc
- 11. 二級緩存不能在Hibernate + Spring + JPA和EhCache中工作
- 12. 如何使用.Net清除緩存
- 13. 清除python中的所有Varnish緩存
- 14. 清除所有網站緩存?
- 15. 清除Hibernate的二級緩存
- 16. 清除Hibernate的二級緩存
- 17. Android:如何同時清除所有應用程序的緩存
- 18. Hibernate和EhCache故障緩存集合
- 19. Hibernate的二級緩存+的Ehcache問題
- 20. 使用Memcached進行Spring-Hibernate緩存
- 21. 使用ehcache緩存java.util.Map
- 22. 如何清除Sprockets緩存?
- 23. 如何清除imagekit緩存
- 24. 如何清除UserPrincipal緩存
- 25. 如何清除html緩存
- 26. 如何清除Flash緩存?
- 27. 如何清除StructureMap緩存?
- 28. 如何清除Jest緩存?
- 29. 如何清除UIWebView緩存
- 30. 如何清除weblogic緩存
對於現代版本的Hibernate,最好遵循@ dino回答。 – JorgeHortelano