By default, Hibernate uses EHCache for JVM-level caching. (JCS support is now deprecated and will be removed in a future
version of Hibernate.) You may choose a different implementation by specifying the name of a class that implements
net.sf.hibernate.cache.CacheProvider using the property hibernate.cache.provider_class.
以上引用自:http://www.hibernate.org/hib_docs/reference/en/html/performance.html#performance-cache
EHCache支持read-only和read/write缓存,内存和磁盘缓存。是一个非常轻量级的缓存实现,而且从1.2 之后就支持了集群,目前的最新版本好像是2.0了。
集群时候推荐使用jboss-cache。
EHCache的使用场合:
1、比较少更新表数据
EhCache一般要使用在比较少执行write操作的表(包括update,insert,delete等)[Hibernate的二级缓存也都是这样];
2、对并发要求不是很严格的情况
两台机子中的缓存是不能实时同步的;
步骤:
1. 先下载ehcache的jar包。
最新版本: ehcache-1.4 released。
解压后,有几个文件:
ehcache-1.4.0.jar:需要将它放置到WEB-INF/lib下
ehcache-1.4.0-remote-debugger.jar:不要发布到工程中,是用来调试和监控你的cache状况的
ehcache-1.4.0-sources.jar:源代码
ehcache.xml:重要的配置文件,需要复制到classpath下 。
<?xml version="1.0" encoding="UTF-8"?> <ehcache> <diskStore path="Java.io.tmpdir"/> <defaultCache maxElementsInMemory="10000" <!-- 缓存最大数目 --> eternal="false" <!-- 缓存是否持久 --> overflowToDisk="true" <!-- 当缓存中的数量超过限制时,是否持久化到硬盘 --> timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 --> timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁 --> diskPersistent="false" diskExpiryThreadIntervalSeconds="120"/> </ehcache>
2. 修改hbm.xml配置
<hibernate-mapping package="******"> <class name="******" table="******"> <!-- enable second level cache --> <cache usage="read-write"/> <id name="id"> <generator class="native"/> </id> <property name="******" type="java.lang.Integer" not-null="true"/> </class> </hibernate-mapping>
3. 修改log4j和hibernate配置
# log4j.properties log4j.logger.net.sf.hibernate=info log4j.logger.net.sf.hibernate.cache=debug # hibernate配置 hibernate.show_sql true
使用QueryCache缓存时加上如下配置,在程序中需要为Query对象设置Cachable属性:
hibernate.cache.use_query_cache true
query.setCacheable(true);
另:Ehcache可以利用Terracotta方式同步缓存
参考:http://nlslzf.iteye.com/blog/563114
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
关于网站首页的页面缓存
缓存策略:当用户第一次请求时,页面被缓存,再次访问时,过滤器进行过滤,不再执行action,从而降低服务器的压力并提高客户端响应速度。
如设置缓存存活时间为2分钟,将如下配置加入到ehcache.xml中:
<cache name="simplePageCachingFilter" maxElementsInMemory="10" maxElementsOnDisk="10" eternal="false" overflowToDisk="true" diskSpoolBufferSizeMB="20" timeToIdleSeconds="60" timeToLiveSeconds="120" />
simplePageCachingFilter 缓存的名称
maxElementsInMemory 缓存中元素的最大数量
maxElementsOnDisk 持久化到硬盘的缓存元素的最大数量
eternal="false" 缓存会被清除
overflowToDisk="true" 当缓存中元素数量超过限制时,将这些元素持久化到硬盘,为false时,设置没意义。
timeToIdleSeconds 多长时间不访问缓存,那么就清除该缓存
timeToLiveSeconds 缓存的存活时间
对应web.xml中的配置:
<filter> <filter-name>indexCacheFilter</filter-name> <filter-class> net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter </filter-class> </filter> <filter-mapping> <filter-name>indexCacheFilter</filter-name> <url-pattern>*index.do</url-pattern> </filter-mapping>
新增附件:缓存技术浅谈.ppt.zip(Robin)