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

hibernate.cache.provider_class = net.sf.hibernate.cache.EhCacheProvider

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

< ehcache >
    
< diskStore path = " java.io.tmpdir " />
    
< defaultCache
        maxElementsInMemory
= " 1000 "
        eternal
= " false "
        timeToIdleSeconds
= " 600 "
        timeToLiveSeconds
= " 600 "
        overflowToDisk
= " false "
        
/>
</ ehcache >

        JavaEye上的《hibernate二級緩存攻略》對這些屬性有如下說明:

eternal表示緩存是不是永遠不超時

timeToLiveSeconds是緩存中每個元素(這里也就是一個POJO)的超時時間,如果eternal
= " false " ,超過指定的時間,這個元素就被移走了。

timeToIdleSeconds是發呆時間,是可選的。當往緩存里面put的元素超過500個時,如果overflowToDisk
= " true " ,就會把緩存中的部分數據保存在硬盤上的臨時文件里面。

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

< cache usage = " read-write "   />

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