Ehcache學習總結(1)--Ehcache入門介紹
阿新 • • 發佈:2019-01-30
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的事務支援,支援事務資源管理,二階段提交和回滾,以及本地事務。
12、開源協議
Apache 2.0 license
過去幾年,諸多測試表明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和大多數快取解決方案一樣,提供高效能的記憶體和磁碟儲存。
動態、執行時快取配置,存活時間、空閒時間、記憶體和磁碟存放快取的最大數目都是可以在執行時修改的。
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的事務支援,支援事務資源管理,二階段提交和回滾,以及本地事務。
12、開源協議
Apache 2.0 license