我正在使用Ehcache
在Web應用程序中緩存昂貴服務調用的結果。Java Web應用程序中的持久緩存?
我希望緩存在JVM重啓過程中持續存在。
我用heap
和disk
配置了一個雙層ehcache。不幸的是Ehcache只在調用PersistentCacheManager.close()
時纔將緩存保存到磁盤。
如何才能讓持久性正常工作?我應該定期關閉並重新打開緩存?我應該看看ehcache以外的東西嗎?
我正在使用Ehcache
在Web應用程序中緩存昂貴服務調用的結果。Java Web應用程序中的持久緩存?
我希望緩存在JVM重啓過程中持續存在。
我用heap
和disk
配置了一個雙層ehcache。不幸的是Ehcache只在調用PersistentCacheManager.close()
時纔將緩存保存到磁盤。
如何才能讓持久性正常工作?我應該定期關閉並重新打開緩存?我應該看看ehcache以外的東西嗎?
Ehcache使用分層模型 - 寫入緩存的數據總是放在最低層 - 磁盤上。然後在發生讀取操作時,將頻繁訪問的值拉入堆層以便更快地檢索。因此,數據將在操作期間寫入磁盤,提供比堆更大的緩存空間。
爲了保證高速緩存的完整性和JVM重啓後恢復數據的能力,需要調用PersistentCacheManager.close()
。但這並不意味着它必須在應用程序的生命中發生,只需要一個正確的Web應用程序關閉序列而不是簡單地殺死JVM。
我建議你使用Terracotta cluster deployment(它也是開源的),在你的web應用程序JVM旁邊。
你會再配置,對Web應用程序,3層:堆,offheap和集羣
<cache alias="clustered-cache">
<resources>
<heap unit="MB">10</heap>
<offheap unit="MB">512</offheap>
<clustered-dedicated unit="GB">2</clustered-dedicated>
</resources>
</cache>
Terracotta服務器部署將是1活動,1被動 - 所以,當你有一個故障或在1臺服務器上進行預測性維護,另一臺仍然服務於所有客戶端。
與開源磁盤層相比,使用開源羣集層的好處在於,如果發生故障(Web應用程序容器故障,兵馬俑服務器故障),您的數據仍然完好無損,這要歸功於您的冗餘建立。
製作可從光盤存儲加載的緩存實際上非常困難。可能* Ehcache *決定將其緩存存儲在內存中足夠好。我想你可能需要多看看,找出你需要的東西。尋找由數據庫支持而不是平面文件的東西,因爲如果要保存對象並實時檢索它們,基本上就是您需要的。 (平面文件僅用於啓動/關閉保存。) – markspace
您的應用程序聽起來像與SQLite3的完美匹配。 – MarsAtomic