最近結(jié)束了一個(gè)小型網(wǎng)站項(xiàng)目,主要功能就是一個(gè)文章系統(tǒng),為了提升站點(diǎn)性能,我在首頁(yè)上使用了OSCache,在訪問首頁(yè)時(shí),性能的確有不小的提升(具體數(shù)據(jù)見《JMeter小實(shí)驗(yàn)——JSP性能簡(jiǎn)單測(cè)試》),但我對(duì)此并不滿足,打算使用Hibernate的二級(jí)緩存來優(yōu)化訪問文章和欄目時(shí)的速度。
Hibernate的二級(jí)緩存有很多選擇,我選擇了默認(rèn)的EHCache。它的配置十分簡(jiǎn)單,只要在Hibernate配置里加入

然后在Classpath里加入EHCache.xml文件,我的文件內(nèi)容如下:










JavaEye上的《hibernate二級(jí)緩存攻略》對(duì)這些屬性有如下說明:





注意:我的配置中最大元素設(shè)成了1000。
如果希望每個(gè)緩存的POJO有自己的配置,可以把defaultCache換成cache name="com.xxx.pojo.Foo"。
完成了EHCache.xml的配置,接下來在每個(gè)要被緩存的POJO映射 文件里加入

其中read-write是緩存策略,Hibernate還有read-only、nonstrict-read-write和transactional這些策略以供選擇。
配置完成后,我用JMeter測(cè)試,發(fā)現(xiàn)頭兩次訪問的時(shí)間很長(zhǎng),但隨后的訪問速度有很大提升,數(shù)字上相差兩位呢。雖然在實(shí)際使用時(shí)還有網(wǎng)絡(luò)等因素會(huì)影響站點(diǎn)的訪問,不過總的來說對(duì)于這樣的小型文章系統(tǒng),二級(jí)緩存的使用還是對(duì)整體性能有幫助的。最后要做的就是根據(jù)實(shí)際使用情況,適當(dāng)調(diào)整一下緩存設(shè)置,我用SpringAOP建立了一個(gè)處理日志的攔截器,記錄訪問量和訪問間隔,先讓它運(yùn)行一段時(shí)間,隨后根據(jù)日志情況對(duì)緩存作調(diào)整。