前陣子對(duì)公司網(wǎng)站進(jìn)行了性能優(yōu)化,其中,有一項(xiàng)就是使用OSCache添加頁(yè)面的緩存,開(kāi)始還不以為然,做完緩存后,發(fā)現(xiàn)服務(wù)器的負(fù)載大大減小了,看來(lái)還真不能小瞧OSCache。 OSCache 主要用于頁(yè)面緩存,當(dāng)然它也可用于數(shù)據(jù)層緩存,但數(shù)據(jù)層緩存一般使用ehcache比較成熟。OSCache對(duì)于更新較慢的頁(yè)面(比如一天或半天更新一次)緩存效果比較好,能大幅降低數(shù)據(jù)庫(kù)和服務(wù)器的壓力,而且OSCache簡(jiǎn)單易用,是一個(gè)非常不錯(cuò)的緩存框架。 OSCache的配置和使用 一、oscache 環(huán)境搭建 1, 從 https://oscache.dev./files/documents/629/61427/oscache-2.4.1-full.zip 下載 oscache-2.4.1-full版本,并從壓縮包中分別拷貝oscache-2.4.1.jar、oscache.properties、 oscache.tld放入本地項(xiàng)目的應(yīng)用目錄,如下: $WEB-APP"WEB-INF"lib"oscache.jar $WEB-APP"WEB-INF"classes"oscache.properties $WEB-APP"WEB-INF"classes"oscache.tld 2, 在web.xml 中加入如下配置 <taglib> <taglib-uri>oscache</taglib-uri> <taglib-location>/WEB-INF/classes/oscache.tld</taglib-location> </taglib> 3, 如果需要日志輸出,可在log4j.properties文件中加入如下配置 log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=oscache.log log4j.appender.file.MaxFileSize=100KB log4j.appender.file.MaxBackupIndex=5 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=[start]%d{yyyy/MM/dd/HH:mm:ss} 二、oscache.properties 主要配置 1,cache.memory = true 設(shè)置是否使用內(nèi)存緩存 可設(shè)置為true 或者 false ,默認(rèn)為true 2,cache.capacity =10000 設(shè)置緩存對(duì)象的最大數(shù)量值 默認(rèn)是不限制,cache不會(huì)移走任何緩存內(nèi)容,負(fù)數(shù)被當(dāng)作不限制 3,cache.unlimited.disk 指定硬盤緩存是否要作限制,默認(rèn)值為false false的狀況下,硬盤緩存容量將和cache.capacity的值相同 4,cache.path 指定硬盤緩存的路徑,目錄如果不存在將被建立,同時(shí)注意oscache應(yīng)該要有權(quán)限寫文件系統(tǒng)。 設(shè)置如:cache.path=d:""myapp""cache 5,cache.persistence.overflow.on 指定是否只有在內(nèi)存不足的情況下才使用硬盤緩存。默認(rèn)值false,推薦使用true如果內(nèi)存cache被允許的話 三、標(biāo)簽參數(shù)介紹 使用了oscache:cache 的屬性: key 緩沖的key,可以是任何的字符串,也可以動(dòng)態(tài)生成。在一個(gè)范圍內(nèi)必須唯一。默認(rèn)使用請(qǐng)求的URI和請(qǐng)求的字符串(問(wèn)號(hào)后面的部分) scope 范圍,有application和session, 默認(rèn)為 application time 緩沖內(nèi)容的時(shí)間(秒),默認(rèn)為1小時(shí),3600秒,如果為-1則內(nèi)容永遠(yuǎn)不過(guò)期 refresh 強(qiáng)制刷新緩存,false 或者true,可以使用此屬性受動(dòng)刷新需立即更新的數(shù)據(jù) groups 設(shè)置分組,可以同組的緩沖數(shù)據(jù)進(jìn)行控制 language 語(yǔ)言,默認(rèn)為當(dāng)前頁(yè)面的語(yǔ)言 還有許多其他的屬性,在這里不一一列舉 四、oscache 基本用法 1,設(shè)置緩存 <%@ taglib uri="/WEB-INF/tlds/oscache.tld" prefix="oscache" %> <oscache:cache key=”cacheKey” time=”300” scope=”application”>被緩存的列表 </oscache:cache> 其中,cacheKey和time可以自己動(dòng)態(tài)構(gòu)件,scope(緩存范圍) 可以是ession、application 注意:cacheKey或者time如果是jsp表達(dá)式時(shí),如:key=”<%=”string”+variable%>”而不是:key=”string<%=variable%>”,寫法要注意,否則頁(yè)面會(huì)報(bào)錯(cuò) 2,刷新緩存 <%@ taglib uri="/WEB-INF/tlds/oscache.tld" prefix="oscache" %> <oscache:flush key=”cacheKey” scope=”application” /> 3,分組緩存 <cache:flush group='b' scope='application'/> <cache:cachekey='cacheKey_1' groups='a,b' duration='5s'> 這里面的內(nèi)容被緩存到鍵值為cacheKey_1,組名為a和b的緩存中,正常情況下,每隔5秒鐘刷新一 次,但受上面標(biāo)簽“<cache:flush group='b' scope='application'/>”的影響,它將隨每次頁(yè)面的刷新而刷新 </cache:cache> <cache:cachekey='cacheKey_2' groups='a' duration='5s'> 這里面的內(nèi)容被緩存到鍵值為cacheKey_2,組名為a的緩存中,它將每隔5秒中刷新一次 </cache:cache> <cache:cachekey='cacheKey_3' duration='20s'> 這里面的內(nèi)容被緩存到cacheKey_3,組a,b中,組是通過(guò)標(biāo)簽<cache: addgroup>而添加的,它也會(huì)受本頁(yè)開(kāi)頭標(biāo)簽“<cache:flush group='b' scope='application'/>”的影響而隨頁(yè)面刷新而刷新 <cache:addgroup group='a'/> <cache:addgroup group='b'/> </cache:cache> <cache:cachekey='cacheKey_4' duration='20s'> 這里面的內(nèi)容被緩存到cacheKey_4,組a,b中,組是通過(guò)標(biāo)簽<cache: addgroups>而添加的,它也會(huì)受本頁(yè)開(kāi)頭標(biāo)簽“<cache:flush group='b' scope='application'/>”的影響而隨頁(yè)面刷新而刷新 <cache:addgroups groups='a,b'/> </cache:cache> 五、參考資料 1,oscache-2.4.1-full 中的demo,下在地址: https://oscache.dev./files/documents/629/61427/oscache-2.4.1-full.zip 2,oscache API:http://www./oscache/api/ |
|