免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
細(xì)談Ehcache頁(yè)面緩存的使用

關(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ō)javaeyejava 版區(qū)只有前幾個(gè)頁(yè)面是訪問(wèn)最頻繁的,(假設(shè)javaeye 是使用hibernate ,當(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ò)的主意,那么主頁(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è)面緩存做到盡量靠近客戶的地方,就是在pagefilter 之間,這樣的優(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ù)器壓力的減低和客戶段頁(yè)面響應(yīng)速度的加快。

 

那么我們來(lái)看一下如何使用ehcache 做到這一點(diǎn)。

 

在使用ehcache 的頁(yè)面緩存之前,我們必須要了解ehcache 的幾個(gè)概念,

1 timeToIdleSeconds ,多長(zhǎng)時(shí)間不訪問(wèn)該緩存,那么ehcache 就會(huì)清除該緩存。

2 timeToLiveSeconds ,緩存的存活時(shí)間,從開(kāi)始創(chuàng)建的時(shí)間算起。

 

看到這里,我們知道,首頁(yè)的頁(yè)面緩存的存活時(shí)間,我們定的是2 分鐘,那么也就是說(shuō)我們的timeToLiveSeconds 應(yīng)該設(shè)置為120 ,同時(shí)我們的timeToIdleSeconds 最好也設(shè)置為2 分鐘,或者小于2 分鐘。我們來(lái)看一下下面這個(gè)配置,這個(gè)配置片段應(yīng)該放到ehcache.xml 中:

 

< cache name = "SimplePageCachingFilter"

           maxElementsInMemory = "10"

           maxElementsOnDisk = "10"

           eternal = "false"

            overflowToDisk = "true"

           diskSpoolBufferSizeMB = "20"

           timeToIdleSeconds = "10"

           timeToLiveSeconds = "10"

           memoryStoreEvictionPolicy = "LFU"

            />

 

SimplePageCachingFilter 是緩存的名字,maxElementsInMemory 表示內(nèi)存中SimplePageCachingFilter 緩存中元素的最大數(shù)量為10 ,maxElementsOnDisk 是指持久化該緩存的元素到硬盤(pán)上的最大數(shù)量也為10 (),eternal=false 意味著該緩存會(huì)死亡。overflowToDisk=true 意思是表示當(dāng)緩存中元素的數(shù)量超過(guò)限制時(shí),就把這些元素持久化到硬盤(pán),如果overflowToDiskfalse ,那么maxElementsOnDisk 的設(shè)置就沒(méi)有什么意義了。memoryStoreEvictionPolicy=LFU 是指按照緩存的hit 值來(lái)清除,也就是說(shuō)緩存滿了之后,新的對(duì)象需要緩存時(shí),將會(huì)將緩存中hit 值最小的對(duì)象清除出緩存,給新的對(duì)象騰出地方來(lái)了(文章最后有ehcache 中自帶的3 種緩存清空策略的介紹)。

 

接著我們來(lái)看一下SimplePageCachingFilter 的配置,

< filter >

        < filter-name > indexCacheFilter filter-name >

        < filter-class >

            net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter

        filter-class >

filter >

 

    < filter-mapping >

        < filter-name > indexCacheFilter filter-name >

        < url-pattern > *index.action url-pattern >

filter-mapping >

就只需要這么多步驟,我們就可以給某個(gè)頁(yè)面做一個(gè)緩存的,把上面這段配置放到你的web.xml 中,那么當(dāng)你打開(kāi)首頁(yè)的時(shí)候,你會(huì)發(fā)現(xiàn),2 分鐘才會(huì)有一堆sql 語(yǔ)句出現(xiàn)在控制臺(tái)上。當(dāng)然你也可以調(diào)成5 分鐘,總之一切都在控制中。

 

好了,緩存整個(gè)頁(yè)面看上去是非常的簡(jiǎn)單,甚至都不需要寫(xiě)一行代碼,只需要幾行配置就行了,夠簡(jiǎn)單吧,雖然看上去簡(jiǎn)單,但是事實(shí)上內(nèi)部實(shí)現(xiàn)卻不簡(jiǎn)單哦,有興趣的話,大家可以看看SimplePageCachingFilter 繼承體系的源代碼。

 

上面的配置針對(duì)的情況是緩存首頁(yè)的全部,如果你只想緩存首頁(yè)的部分內(nèi)容時(shí),你需要使用SimplePageFragmentCachingFilter 這個(gè)filter 。我們看一下如下片斷:

 

< filter >

        < filter-name > indexCacheFilter filter-name >

        < filter-class >

            net.sf.ehcache.constructs.web.filter.SimplePageFragmentCachingFilter

        filter-class >

filter >

 

    < filter-mapping >

        < filter-name > indexCacheFilter filter-name >

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

filter-mapping >

 

這個(gè)jsp 需要被jsp:include 到其他頁(yè)面,這樣就做到的局部頁(yè)面的緩存。這一點(diǎn)貌似沒(méi)有oscachetag 好用。

 

事實(shí)上在cachefilter 中還有一個(gè)特性,就是gzip ,也就是說(shuō)緩存中的元素是被壓縮過(guò)的,如果客戶瀏覽器支持壓縮的話,filter 會(huì)直接返回壓縮過(guò)的流,這樣節(jié)省了帶寬,把解壓的工作交給了客戶瀏覽器,如果客戶的瀏覽器不支持gzip ,那么filter 會(huì)把緩存的元素拿出來(lái)解壓后再返回給客戶瀏覽器(大多數(shù)爬蟲(chóng)是不支持gzip 的,所以filter 也會(huì)解壓后再返回流),這樣做的優(yōu)點(diǎn)是節(jié)省帶寬,缺點(diǎn)就是增加了客戶瀏覽器的負(fù)擔(dān)(但是我覺(jué)得對(duì)當(dāng)代的計(jì)算機(jī)而言,這個(gè)負(fù)擔(dān)微乎其微)。

 

好了,如果你的頁(yè)面正好也需要用到頁(yè)面緩存,不防可以考慮一下ehcache ,因?yàn)樗鼘?shí)在是非常簡(jiǎn)單,而且易用。

 

總結(jié):ehcache 是一個(gè)非常輕量級(jí)的緩存實(shí)現(xiàn),而且從1.2 之后就支持了集群,目前的最新版本是1.3 ,而且是hibernate 默認(rèn)的緩存provider 。雖然本文是介紹的是ehcache 對(duì)頁(yè)面緩存的支持,但是ehcache 的功能遠(yuǎn)不止如此,當(dāng)然要使用好緩存,對(duì)JEE 中緩存的原理,使用范圍,適用場(chǎng)景等等都需要有比較深刻的理解,這樣才能用好緩存,用對(duì)緩存。

 

最后復(fù)習(xí)一下ehcache 中緩存的3 種清空策略:

1 FIFO first in first out ,這個(gè)是大家最熟的,先進(jìn)先出,不多講了

2 LFU Less Frequently Used ,就是上面例子中使用的策略,直白一點(diǎn)就是講一直以來(lái)最少被使用的。如上面所講,緩存的元素有一個(gè)hit 屬性,hit 值最小的將會(huì)被清出緩存。

2 LRU ,Least Recently Used ,最近最少使用的,緩存的元素有一個(gè)時(shí)間戳,當(dāng)緩存容量滿了,而又需要騰出地方來(lái)緩存新的元素的時(shí)候,那么現(xiàn)有緩存元素中時(shí)間戳離當(dāng)前時(shí)間最遠(yuǎn)的元素將被清出緩存。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ehcache
Ehcache 整合Spring 使用頁(yè)面、對(duì)象緩存
spring+hibernate整合
Hibernate 數(shù)據(jù)緩存
EHCache - 單落撒旦的日志 - 網(wǎng)易博客
Hibernate(四)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服