2017-02-02 21 views
0

我是新來的Ehcache刷新,我的REST API的緩存工作的Ehcache時,在數據庫中更新走位

<cache name="com.a.b.c.model.Act" 
maxElementsInMemory="10000" overflowToDisk="false" statistics="true" /> 

如果我通過查詢做任何更新的數據庫,緩存將不會更新這些變化。

如果我通過REST API進行更新,緩存將被刷新。

我有什麼變化做出,如果我要得到的緩存刷新當變化發生在數據庫

是好與timeToLiveSeconds或任何其他配置去可以做什麼?

回答

2

當底層系統的記錄發生變化時,而不是通過執行緩存的服務方法更新緩存是高速緩存的經典問題。

Ehcache並不提供開箱即用的解決方案,因爲這意味着支持全部可充當記錄系統的技術。不僅數據庫,而且Web服務和程序員可以提出的任何東西。

但是,如果您的應用程序可以在緩存中存在過時的數據一小段時間,那麼到期可能會有所幫助。它有效地將緩存條目標記爲有效一段時間 - 生存時間。

如果您的應用程序無法在緩存中支持陳舊的數據,則必須確保更新記錄系統的過程也負責使緩存失效。

1

如果是upadating對數據庫訪問的Ehcache管理器(VM相同或分佈式持久性)的代碼,最好的解決辦法就是打破緩存

CacheManager.getInstance().getEhcache("mycache").remove(key); 

,讓緩存刷新自主。

如果你已經部署更新的對象,你也可以跳過一個步驟put

CacheManager.getInstance().getEhcache("mycache").put(key, updatedObject); 

如果你的代碼有CacheEntryFactories我先給工廠做業務(條目創建是集中式的,你可以添加更多那裏的邏輯)