EhCache應用之頁面快取

2021-08-27 02:45:22 字數 2142 閱讀 8828

******pagecachingfilter 是快取的名字,maxelementsinmemory 表示記憶體中******pagecachingfilter 快取中元素的最大數量為10 ,maxelementsondisk 是指持久化該快取的元素到硬碟上的最大數量也為10 (),eternal=false 意味著該快取會死亡。overflowtodisk=true 意思是表示當快取中元素的數量超過限制時,就把這些元素持久化到硬碟,如果overflowtodisk 是false ,那麼maxelementsondisk 的設定就沒有什麼意義了。memorystoreevictionpolicy=lfu 是指按照快取的hit 值來清除,也就是說快取滿了之後,新的物件需要快取時,將會將快取中hit 值最小的物件清除出快取,給新的物件騰出地方來了(文章最後有ehcache 中自帶的3 種快取清空策略的介紹)。

接著我們來看一下******pagecachingfilter 的配置,

indexcachefilter

net.sf.ehcache.constructs.web.filter.******pagecachingfilter

/testjson.do

就只需要這麼多步驟,我們就可以給某個頁面做乙個快取的,把上面這段配置放到你的web.xml 中,那麼當你開啟首頁的時候,你會發現,2 分鐘才會有一堆sql 語句出現在控制台上。當然你也可以調成5 分鐘,總之一切都在控制中。

好了,快取整個頁面看上去是非常的簡單,甚至都不需要寫一行**,只需要幾行配置就行了,夠簡單吧,雖然看上去簡單,但是事實上內部實現卻不簡單哦,有興趣的話,大家可以看看******pagecachingfilter 繼承體系的源**。

上面的配置針對的情況是快取首頁的全部,如果你只想快取首頁的部分內容時,你需要使用******pagefragmentcachingfilter 這個filter 。我們看一下如下片斷:

< filter >

< filter-name > indexcachefilter filter-name >

< filter-class >

net.sf.ehcache.constructs.web.filter.******pagefragmentcachingfilter

filter-class >

filter >

< filter-name > indexcachefilter filter-name >

< url-pattern > */index_right.jsp url-pattern >

這個jsp 需要被jsp:include 到其他頁面,這樣就做到的區域性頁面的快取。這一點貌似沒有oscache 的tag 好用。

事實上在cachefilter 中還有乙個特性,就是gzip ,也就是說快取中的元素是被壓縮過的,如果客戶瀏覽器支援壓縮的話,filter 會直接返回壓縮過的流,這樣節省了頻寬,把解壓的工作交給了客戶瀏覽器,如果客戶的瀏覽器不支援gzip ,那麼filter 會把快取的元素拿出來解壓後再返回給客戶瀏覽器(大多數爬蟲是不支援gzip 的,所以filter 也會解壓後再返回流),這樣做的優點是節省頻寬,缺點就是增加了客戶瀏覽器的負擔(但是我覺得對當代的計算機而言,這個負擔微乎其微)。

好了,如果你的頁面正好也需要用到頁面快取,不防可以考慮一下ehcache ,因為它實在是非常簡單,而且易用。

總結:ehcache 是乙個非常輕量級的快取實現,而且從1.2 之後就支援了集群,目前的最新版本是1.3 ,而且是hibernate 預設的快取provider 。雖然本文是介紹的是ehcache 對頁面快取的支援,但是ehcache 的功能遠不止如此,當然要使用好快取,對jee 中快取的原理,使用範圍,適用場景等等都需要有比較深刻的理解,這樣才能用好快取,用對快取。

最後複習一下ehcache 中快取的3 種清空策略:

1 fifo ,first in first out ,這個是大家最熟的,先進先出,不多講了

2 lfu , less frequently used ,就是上面例子中使用的策略,直白一點就是講一直以來最少被使用的。如上面所講,快取的元素有乙個hit 屬性,hit 值最小的將會被清出快取。

2 lru ,least recently used ,最近最少使用的,快取的元素有乙個時間戳,當快取容量滿了,而又需要騰出地方來快取新的元素的時候,那麼現有快取元素中時間戳離當前時間最遠的元素將被清出快取。

EhCache應用之單獨使用

ehcache其實底層的實現就是static方法,我聲名乙個變數為static,實際上就把這個變數放在了快取中,只不過ehcahce等快取框架是封裝了一層,提供了一些實用的方法並且可以進行一些配置。下面介紹乙個簡單的實用ehcache的例子。分成4個部分。public class testmain ...

Ehcache快取配置

cache配置 name cache的唯一標識 maxelementsinmemory 記憶體中最大快取物件數。maxelementsondisk 磁碟中最大快取物件數,若是0表示無窮大。eternal element是否永久有效,一但設定了,timeout將不起作用。overflowtodisk ...

ehcache 快取使用

一 詳細配置步驟 1,新增ehcache.xml檔案 將ehcache.xml檔案新增到src路徑下面。ehcache.xml檔案內容如下 2,新增spring配置檔案 二 使用 1,定義ehcache工具方法 public class ehcache public cache getcache p...