2011-04-29 190 views
5

我在Hibernate中使用Ehcache。Ehcache中的緩存失效

如何通知緩存數據庫已更改?我如何使緩存的數據無效?我如何以編程方式實現此目的?

回答

9

究竟是什麼意思?有兩種方法可以在數據庫中進行更改:應用程序內部&外部應用程序

在應用程序內部,您可以輕鬆觸發無效操作。第二個是更難解決的。緩存元素與密鑰一起存儲,並基於該密鑰可以將其刪除。

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

or 

cache.removeAll(); 

這取決於你如何配置ehcache當然。但是您需要知道包含該對象的緩存的名稱。

4

這是你怎麼能所有失效項目的EHCache不困擾各個高速緩衝存儲器的名字是什麼:

CacheManager manager = CacheManager.getInstance(); 

String[] names = manager.getCacheNames(); 

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

    cache.removeAll(); 
} 
+2

雖然這可能在寫作的時候效果很好,我不得不更換['.getCache']( http://ehcache.org/apidocs/net/sf/ehcache/CacheManager.html#getCache \(java.lang.String \))與['.getEhcache'](http://ehcache.org/apidocs/net /sf/ehcache/CacheManager.html#getEhcache \(java.lang.String \))和['Cache'](http://ehcache.org/apidocs/net/sf/ehcache/Cache.html)與[ 'Ehcache'](http://ehcache.org/apidocs/net/sf/ehcache/hibernate/EhCache.html)。否則,即使對於存在的緩存,'.getCache'也會返回'null'。 – moshen 2013-05-10 16:15:48

+0

沒有爲我工作,因爲我的配置是[休眠ehcache timeToLiveSeconds不工作](http://stackoverflow.com/q/18914668/432903) – prayagupd 2013-09-22 07:45:26

1

嘗試:

CacheManager.create().clearAll() 

它會清除所有緩存中的CacheManager。

僅清除一個特定的緩存,從高速緩存管理器得到它,並刪除所有元素:

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