資源描述:
《ehcache緩存頁(yè)面》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、/***作者:張榮華*日期:2007-9-26**/關(guān)于緩存的話題,在壇子里已經(jīng)有很多討論,簡(jiǎn)單的來(lái)說(shuō),如果一個(gè)應(yīng)用中80%的時(shí)間內(nèi)都在訪問(wèn)20%的數(shù)據(jù),那么,這時(shí)候就應(yīng)該使用緩存了。這個(gè)和長(zhǎng)尾理論正好相悖,其實(shí)也不是相悖,只是不同的理論使用的場(chǎng)景不同。在80/20原則生效的地方,我們都應(yīng)該考慮是否可以使用緩存。但即使是這樣,緩存也有不同的用法,舉個(gè)例子,一個(gè)網(wǎng)站的首頁(yè)估計(jì)是被訪問(wèn)的次數(shù)最多的,我們可以考慮給首頁(yè)做一個(gè)頁(yè)面緩存,而如果在某個(gè)頁(yè)面上,比如說(shuō)javaeye的java版區(qū)只有前幾個(gè)頁(yè)面是訪問(wèn)最頻繁的,(假設(shè)javaeye是使用h
2、ibernate,當(dāng)然這只是假設(shè),我們都知道javaeye是使用ror開(kāi)發(fā)的)那么我們就可以考慮給java版區(qū)的record做二級(jí)緩存了,因?yàn)槎?jí)緩存中是按照對(duì)象的id來(lái)保存的,所以應(yīng)該來(lái)說(shuō)這前面幾頁(yè)使用的對(duì)象會(huì)一直存在于緩存之中(如何使用hibernate的二級(jí)緩存壇子上也有介紹)。由此可見(jiàn)不同的頁(yè)面的緩存策略有可能有天壤之別。本文的目的就是上面所講的兩種情況之一,頁(yè)面緩存。毫無(wú)疑問(wèn),幾乎所有的網(wǎng)站的首頁(yè)都是訪問(wèn)率最高的,而首頁(yè)上的數(shù)據(jù)來(lái)源又是非常廣泛的,大多數(shù)來(lái)自不同的對(duì)象,而且有可能來(lái)自不同的db,所以給首頁(yè)做緩存是一個(gè)不錯(cuò)的主意,
3、那么主頁(yè)的緩存策略是什么樣子的呢,我認(rèn)為應(yīng)該是某個(gè)固定時(shí)間之內(nèi)不變的,比如說(shuō)2分鐘更新一次。那么這個(gè)緩存應(yīng)該做在什么地方呢,讓我們來(lái)看一下,假設(shè)您的應(yīng)用的結(jié)構(gòu)是page-filter-action-service-dao-db,這個(gè)過(guò)程中的-的地方都是可以做緩存的地方,根據(jù)頁(yè)面緩存的特征,應(yīng)該把頁(yè)面緩存做到盡量靠近客戶的地方,就是在page和filter之間,這樣的優(yōu)點(diǎn)就是第一個(gè)用戶請(qǐng)求之后,頁(yè)面被緩存,第二個(gè)用戶再來(lái)請(qǐng)求的時(shí)候,走到filter這個(gè)請(qǐng)求就結(jié)束了,無(wú)需再走后面的action-service-dao-db。帶來(lái)的好處是服務(wù)器
4、壓力的減低和客戶段頁(yè)面響應(yīng)速度的加快。那么我們來(lái)看一下如何使用ehcache做到這一點(diǎn)。在使用ehcache的頁(yè)面緩存之前,我們必須要了解ehcache的幾個(gè)概念,1timeToIdleSeconds,多長(zhǎng)時(shí)間不訪問(wèn)該緩存,那么ehcache就會(huì)清除該緩存。2timeToLiveSeconds,緩存的存活時(shí)間,從開(kāi)始創(chuàng)建的時(shí)間算起??吹竭@里,我們知道,首頁(yè)的頁(yè)面緩存的存活時(shí)間,我們定的是2分鐘,那么也就是說(shuō)我們的timeToLiveSeconds應(yīng)該設(shè)置為120,同時(shí)我們的timeToIdleSeconds最好也設(shè)置為2分鐘,或者大于2分
5、鐘。我們來(lái)看一下下面這個(gè)配置,這個(gè)配置片段應(yīng)該放到ehcache.xml中:SimplePageCac
6、hingFilter是緩存的名字,maxElementsInMemory表示內(nèi)存中SimplePageCachingFilter緩存中元素的最大數(shù)量為10,maxElementsOnDisk是指持久化該緩存的元素到硬盤(pán)上的最大數(shù)量也為10(),eternal=false意味著該緩存會(huì)死亡。overflowToDisk=true意思是表示當(dāng)緩存中元素的數(shù)量超過(guò)限制時(shí),就把這些元素持久化到硬盤(pán),如果overflowToDisk是false,那么maxElementsOnDisk的設(shè)置就沒(méi)有什么意義了。memoryStoreEvictionPo
7、licy=LFU是指按照緩存的hit值來(lái)清除,也就是說(shuō)緩存滿了之后,新的對(duì)象需要緩存時(shí),將會(huì)將緩存中hit值最小的對(duì)象清除出緩存,給新的對(duì)象騰出地方來(lái)了(文章最后有ehcache中自帶的3種緩存清空策略的介紹)。接著我們來(lái)看一下SimplePageCachingFilter的配置,indexCacheFilternet.sf.ehcache.constructs.web.filter.SimplePageCachingFilter8、er-class>
indexCacheFilter*index