一、hibernate緩存簡介
二、EhCache簡介
EHCache 是一個非常輕量級的緩存實現,是一個純Java的進程內緩存框架,而且從1.2 之後就支持了集羣,是Hibernate中默認的CacheProvider。
具有快速、精幹等特點,Ehcache可以直接使用。
也可以和Hibernate對象/關係框架結合使用。可以將對象、數據、jsp、Servlet進行緩存。
Cache 存儲方式 :內存或磁盤。
三、配置
1、首先到官網下載ehcache-core.jar、ehcache-web.jar最新版本,然後加入所在工程的lib中
2、在hibernate的相關配置中添加如下:
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</prop>
3、需要在映射文件*.hbm.xml中<class name="" table="" > 節點下添加如下:
<!-- 緩存策略 -->
<cache usage="read-write"/>
4、在src根目錄下加入ehcache.xml文件,具體內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!-- 數據緩存存放目錄 -->
<diskStore path="/jcms_cache_data/ehcache"/>
<!--
頁面緩存
三種緩存算法:LRU-最近最少使用、LFU-較少頻率使用和FIFO-先進先出。
參數詳解:
simplePageCachingFilter 緩存的名稱
maxElementsInMemory 緩存中元素的最大數量
maxElementsOnDisk 持久化到硬盤的緩存元素的最大數量
eternal="false" 如果爲true,表示對象永遠不會過期,此時會忽略timeToIdleSeconds和timeToLiveSeconds屬性,默認爲false;
overflowToDisk="true" 當緩存中元素數量超過限制時,將這些元素持久化到硬盤,爲false時,設置沒意義。
timeToIdleSeconds 多長時間不訪問緩存,那麼就清除該緩存
timeToLiveSeconds 緩存的存活時間
-->
<cache name="SimplePageCachingFilter"
maxElementsInMemory="10000"
maxElementsOnDisk="1000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="5"
timeToLiveSeconds="30"
memoryStoreEvictionPolicy="LFU"/>
<!-- Ehcache 對象、數據緩存用以下配置 -->
<defaultCache maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskSpoolBufferSizeMB="30"
maxElementsOnDisk="10000000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"/>
</ehcache>
5、web.xml中加入以下配置:
<!-- Ehcache頁面緩存配置 -->
<filter>
<filter-name>PageCacheFilter</filter-name>
<filter-class>net.cnki.tpi.cms.util.PageCacheFilter</filter-class>
<!-- 初始化參數爲無需緩存的URL,多個以逗號分隔 -->
<init-param>
<param-name>notCacheUrlList</param-name>
<param-value>/jcms/pcons/getUserManager.action</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PageCacheFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5、寫一個Filter,繼承SimplePageCachingFilter,如下: