前陣子對公司網(wǎng)站進(jìn)行了性能優(yōu)化,其中,有一項(xiàng)就是使用OSCache添加頁面的緩存,開始還不以為然,做完緩存后,發(fā)現(xiàn)服務(wù)器的負(fù)載大大減小了,看來還真不能小瞧OSCache。
OSCache 主要用于頁面緩存,當(dāng)然它也可用于數(shù)據(jù)層緩存,但數(shù)據(jù)層緩存一般使用ehcache比較成熟。OSCache對于更新較慢的頁面(比如一天或半天更新一次)緩存效果比較好,能大幅降低數(shù)據(jù)庫和服務(wù)器的壓力,而且OSCache簡單易用,是一個(gè)非常不錯(cuò)的緩存框架。
OSCache的配置和使用
一、oscache 環(huán)境搭建
1, 從 https://oscache.dev.java.net/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è)置緩存對象的最大數(shù)量值
默認(rèn)是不限制,cache不會移走任何緩存內(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.only
指定是否只有在內(nèi)存不足的情況下才使用硬盤緩存。默認(rèn)值false,推薦使用true如果內(nèi)存cache被允許的話
三、標(biāo)簽參數(shù)介紹
使用了oscache:cache 的屬性:
key 緩沖的key,可以是任何的字符串,也可以動態(tài)生成。在一個(gè)范圍內(nèi)必須唯一。默認(rèn)使用請求的URI和請求的字符串(問號后面的部分)
scope 范圍,有application和session, 默認(rèn)為 application
time 緩沖內(nèi)容的時(shí)間(秒),默認(rèn)為1小時(shí),3600秒,如果為-1則內(nèi)容永遠(yuǎn)不過期
refresh 強(qiáng)制刷新緩存,false 或者true,可以使用此屬性受動刷新需立即更新的數(shù)據(jù)
groups 設(shè)置分組,可以同組的緩沖數(shù)據(jù)進(jìn)行控制
language 語言,默認(rèn)為當(dāng)前頁面的語言
還有許多其他的屬性,在這里不一一列舉
四、oscache 基本用法
1,設(shè)置緩存
<%@ taglib uri="/WEB-INF/tlds/oscache.tld" prefix="oscache" %>
<oscache:cache key=”cacheKey” time=”300” scope=”application”>被緩存的列表 </oscache:cache> 其中,cacheKey和time可以自己動態(tài)構(gòu)件,scope(緩存范圍) 可以是ession、application
注意:cacheKey或者time如果是jsp表達(dá)式時(shí),如:key=”<%=”string”+variable%>”而不是:key=”string<%=variable%>”,寫法要注意,否則頁面會報(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'/>”的影響,它將隨每次頁面的刷新而刷新
</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中,組是通過標(biāo)簽<cache: addgroup>而添加的,它也會受本頁開頭標(biāo)簽“<cache:flush group='b' scope='application'/>”的影響而隨頁面刷新而刷新
<cache:addgroup group='a'/>
<cache:addgroup group='b'/>
</cache:cache>
<cache:cachekey='cacheKey_4' duration='20s'>
這里面的內(nèi)容被緩存到cacheKey_4,組a,b中,組是通過標(biāo)簽<cache: addgroups>而添加的,它也會受本頁開頭標(biāo)簽“<cache:flush group='b' scope='application'/>”的影響而隨頁面刷新而刷新
<cache:addgroups groups='a,b'/>
</cache:cache>
五、參考資料
1,oscache-2.4.1-full 中的demo,下在地址:
https://oscache.dev.java.net/files/documents/629/61427/oscache-2.4.1-full.zip
2,oscache API:http://www.opensymphony.com/oscache/api/
---------------------------------
假到真時(shí)真亦假,真到假時(shí)假亦真
---------------------------------