Ehcache的基本概念
基本介紹:
??????? Ehcache是一種廣泛使用的開源Java分布式緩存。主要面向通用緩存,Java EE和輕量級容器。它具有內存和磁盤存儲,緩存加載器,緩存擴展,緩存異常處理程序,一個gzip緩存servlet過濾器,支持REST和SOAP api等特點。
??????? Ehcache 是現在最流行的純Java開源緩存框架,配置簡單、結構清晰、功能強大,最初知道它,是從Hibernate的緩存開始的。網上中文的EhCache材料以簡單介紹和配置方法居多,如果你有這方面的問題,請自行google;對于API,官網上介紹已經非常清楚,請參見官網;但是很少見到特性說明和對實現原理的分析,因此在這篇文章里面,我會詳細介紹和分析EhCache的特性,加上一些自己的理解和思考,希望對緩存感興趣的朋友有所收獲。
特性:
1. 快速 2. 簡單 3. 多種緩存策略 4. 緩存數據有兩級:內存和磁盤,因此無需擔心容量問題 5. 緩存數據會在虛擬機重啟的過程中寫入磁盤 6. 可以通過RMI、可插入API等方式進行分布式緩存 7. 具有緩存和緩存管理器的偵聽接口 8. 支持多緩存管理器實例,以及一個實例的多個緩存區域 9. 提供Hibernate的緩存實現特性一覽
1、快速輕量
????? 過去幾年,諸多測試表明Ehcache是最快的Java緩存之一。Ehcache的線程機制是為大型高并發系統設計的。大量性能測試用例保證Ehcache在不同版本間性能表現得一致性。很多用戶都不知道他們 正在用Ehcache,因為不需要什么特別的配置。API易于使用,這就很容易部署上線和運行。很小的jar包,Ehcache 2.2.3才668kb。最小的依賴:唯一的依賴就是SLF4J了。
2、伸縮性
???? 緩存在內存和磁盤存儲可以伸縮到數G,Ehcache為大數據存儲做過優化。大內存的情況下,所有進程可以支持數百G的吞吐。為高并發和大型多CPU服務器做優化。線程安全和性能總是一對矛盾,Ehcache的線程機制設計采用了Doug Lea的想法來獲得較高的性能。單臺虛擬機上支持多緩存管理器。通過Terracotta服務器矩陣,可以伸縮到數百個節點。
3、靈活性
????? Ehcache 1.2具備對象API接口和可序列化API接口。不能序列化的對象可以使用除磁盤存儲外Ehcache的所有功能。除了元素的返回方法以外,API都是統一的。只有這兩個方法不一致:getObjectValue和getKeyValue。這就使得緩存對象、序列化對象來獲取新的特性這個過程很簡單。支持基于Cache和基于Element的過期策略,每個Cache的存活時間都是可以設置和控制的。
提供了LRU、LFU和FIFO緩存淘汰算法,Ehcache 1.2引入了最少使用和先進先出緩存淘汰算法,構成了完整的緩存淘汰算法。提供內存和磁盤存儲,Ehcache和大多數緩存解決方案一樣,提供高性能的內存和磁盤存儲。動態、運行時緩存配置,存活時間、空閑時間、內存和磁盤存放緩存的最大數目都是可以在運行時修改的。
4、標準支持
????? Ehcache提供了對JSR107 JCACHE API最完整的實現。因為JCACHE在發布以前,Ehcache的實現(如net.sf.jsr107cache)已經發布了。實現JCACHE API有利于到未來其他緩存解決方案的可移植性。Ehcache的維護者Greg Luck,正是JSR107的專家委員會委員。
5、可擴展性
???? 監聽器可以插件化。Ehcache 1.2提供了CacheManagerEventListener和CacheEventListener接口,實現可以插件化,并且可以在ehcache.xml里配置。節點發現,冗余器和監聽器都可以插件化。分布式緩存,從Ehcache 1.2開始引入,包含了一些權衡的選項。Ehcache的團隊相信沒有什么是萬能的配置。實現者可以使用內建的機制或者完全自己實現,因為有完整的插件開發指南。
緩存的可擴展性可以插件化。創建你自己的緩存擴展,它可以持有一個緩存的引用,并且綁定在緩存的生命周期內。緩存加載器可以插件化。創建你自己的緩存加載器,可以使用一些異步方法來加載數據到緩存里面。緩存異常處理器可以插件化。創建一個異常處理器,在異常發生的時候,可以執行某些特定操作。
6、應用持久化
???? 在VM重啟后,持久化到磁盤的存儲可以復原數據。Ehcache是第一個引入緩存數據持久化存儲的開源Java緩存框架。緩存的數據可以在機器重啟后從磁盤上重新獲得。
根據需要將緩存刷到磁盤。將緩存條目刷到磁盤的操作可以通過cache.flush()方法來執行,這大大方便了Ehcache的使用。
7、監聽器
???? 緩存管理器監聽器。允許注冊實現了CacheManagerEventListener接口的監聽器:notifyCacheAdded()notifyCacheRemoved()緩存事件監聽器。允許注冊實現了CacheEventListener接口的監聽器,它提供了許多對緩存事件發生后的處理機制:notifyElementRemoved/Put/Updated/Expired
8、開啟JMX
????? Ehcache的JMX功能是默認開啟的,你可以監控和管理如下的MBean:CacheManager、Cache、CacheConfiguration、CacheStatistics
9、分布式緩存
????? 從Ehcache 1.2開始,支持高性能的分布式緩存,兼具靈活性和擴展性。分布式緩存的選項包括:通過Terracotta的緩存集群:設定和使用Terracotta模式的Ehcache緩存。緩存發現是自動完成的,并且有很多選項可以用來調試緩存行為和性能。使用RMI、JGroups或者JMS來冗余緩存數據:節點可以通過多播或發現者手動配置。狀態更新可以通過RMI連接來異步或者同步完成。
Custom:一個綜合的插件機制,支持發現和復制的能力。可用的緩存復制選項。支持的通過RMI、JGroups或JMS進行的異步或同步的緩存復制。可靠的分發:使用TCP的內建分發機制。
節點發現:節點可以手動配置或者使用多播自動發現,并且可以自動添加和移除節點。對于多播阻塞的情況下,手動配置可以很好地控制。分布式緩存可以任意時間加入或者離開集群。緩存可以配置在初始化的時候執行引導程序員。BootstrapCacheLoaderFactory抽象工廠,實現了BootstrapCacheLoader接口(RMI實現)。緩存服務端。Ehcache提供了一個Cache Server,一個war包,為絕大多數web容器或者是獨立的服務器提供支持。緩存服務端有兩組API:面向資源的RESTful,還有就是SOAP。客戶端沒有實現語言的限制。RESTful緩存服務器:Ehcached的實現嚴格遵循RESTful面向資源的架構風格。SOAP緩存服務端:Ehcache RESTFul Web Services API暴露了單例的CacheManager,他能在ehcache.xml或者IoC容器里面配置。
標準服務端包含了內嵌的Glassfish web容器。它被打成了war包,可以任意部署到支持Servlet 2.5的web容器內。Glassfish V2/3、Tomcat 6和Jetty 6都已經經過了測試。
10、搜索
?????? 標準分布式搜索使用了流式查詢接口的方式,請參閱文檔。
11、Java EE和應用緩存
?????? 為普通緩存場景和模式提供高質量的實現。阻塞緩存:它的機制避免了復制進程并發操作的問題。SelfPopulatingCache在緩存一些開銷昂貴操作時顯得特別有用,它是一種針對讀優化的緩存。它不需要調用者知道緩存元素怎樣被返回,也支持在不阻塞讀的情況下刷新緩存條目。CachingFilter:一個抽象、可擴展的cache filter。SimplePageCachingFilter:用于緩存基于request URI和Query String的頁面。它可以根據HTTP request header的值來選擇采用或者不采用gzip壓縮方式將頁面發到瀏覽器端。你可以用它來緩存整個Servlet頁面,無論你采用的是JSP、velocity,或者其他的頁面渲染技術。SimplePageFragmentCachingFilter:緩存頁面片段,基于request URI和Query String。在JSP中使用jsp:include標簽包含。已經使用Orion和Tomcat測試過,兼容Servlet 2.3、Servlet 2.4規范。Cacheable命令:這是一種老的命令行模式,支持異步行為、容錯。
兼容Hibernate,兼容Google App Engine。基于JTA的事務支持,支持事務資源管理,二階段提交和回滾,以及本地事務。
?
轉載于:https://www.cnblogs.com/guojunjie/p/7161562.html
總結
以上是生活随笔為你收集整理的Ehcache的基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 移动物联网技术LoRa、SigFox、N
- 下一篇: 单行、多汗省略号