一、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,如下: