配置二级缓存主要有两个步骤。
选择需要使用第三方二级缓存组件(如EHCache、Memcached等),在基于JPA
注解实体对象或SessionFactory的配置中定义缓存策略。
配置所选第三方缓存组件的配置文件。每种缓存组件都有自己的配置文件,因此
需要手工编辑它们的配置文件,并将它们放置在类路径下。对于EHCache来说,其配置文
件为ehcache.xml,而JBossCache的配置文件为treecache.xml。
我们采用EHCache缓存实现方案,首先我们通过SessionFactory的配置启用二级缓存
并定义缓存策略,这需要我们调整baobaotao-dao.xml对于sessionFactory Bean的配置。
代码清单17-11 baobaotao-dao.xml
…
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
…
<property name="hibernateProperties">
<props>
17.4 持久层开发
760
…
<!--① 使用EHCache缓存实现方案-->
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
<!--② 配置缓存策略-->
<property name="entityCacheStrategies">
<props>
<prop key="com.baobaotao.domain.Board">
nonstrict-read-write,fixedRegion
</prop>
<prop key="com.baobaotao.domain.User">
nonstrict-read-write,freqChangeRegion
</prop>
<prop key="com.baobaotao.domain.Topic">read-write,freqChangeRegion</prop>
<prop key="com.baobaotao.domain.Post">read-write,freqChangeRegion</prop>
</props>
</property>
</bean>
…
在①处,启用了二级缓存,通过hibernate.cache.provider_class指定了缓存实现类。这
里,我们使用EHCache实现方案。在②处定义了缓存策略,Board使用fixedRegion 缓存
区,这个缓存区中使用的对象永不过期且使用内存缓存。而User、Topic以及Post则使用
freqChangeRegion缓存区,因为它们数目较大,而且较易发生更改。
为了保证EHCache能够正常启用,我们需要将EHCache的类包复制到chapter17/
WebRoot/WEB-INF/lib 目录下,你可以在<Spring>/lib/ehcache/ehcache-1.2.4.jar中找到这个
类包。最后,还需要配置EHCache的配置文件,将其命名为ehcache.xml并放置到类路径
下(chapter17/ src/main/resources/)。来看一下ehcache.xml的配置内容。
代码清单17-12 ehcache.xml
<ehcache>
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="10000" eternal="false"
overflowToDisk="false" timeToIdleSeconds="0" timeToLiveSeconds="0"
diskPersistent="false" diskExpiryThreadIntervalSeconds="120" />
<!--①存放Board的缓存区-->
<cache name="fixedRegion" maxElementsInMemory="100"
eternal="true" overflowToDisk="false"/>
<!--② 存放User、Topic和Post的缓存区-->
<cache name="freqChangeRegion" maxElementsInMemory="5000" eternal="false"
overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="1800"/>
</ehcache>
761
第17章 实战案例开发
在①处定义的fixedRegion 缓存区不使用硬盘缓存,所有对象都在内存中,缓存区中
的对象永不过期,这非常适合缓存类似于Board的实例。在②处定义的freqChangeRegion
缓存区使用硬盘缓存,对象在闲置300秒后就从缓存中清除,且对象的最大存活期限为30
分钟,缓存区中最大的缓存实例个数为5000个,超出此限的实例将被写到硬盘中。这样,
我们就完成了Hibernate二级缓存的所有配置,当启用Spring时,二级缓存就会开始工作了。
需要注意的是,上述配置的EHCache只支持单机缓存(更改ehcache.xml配置,可以
支持分布式集群),也就是在群集环境中,每个应用节点的缓存都是相互独立、无法共享
的,这造成缓存命中率不高。如果Hibernate二级缓存要运行在群集环境中,需要第三方
缓存组件支持集群能力,目前比较常用的有EHCache、Memcached、JBossCache。其中
EHCache、JBossCache是基于Java语言的高效缓存组件,它们都支持分布式集群,支持多
种方式(JGroup)进行应用节点缓存的同步,缓存可以存储在内存或硬盘中。Memcached
服务端是基于C语言的高性能集中式缓存组件,客户端支持多种语言如Java、C、PHP等,
缓存只能存储在内存中。与分布式缓存不同的是,集中式缓存为每个应用节点提供统一的
缓存服务,因此每个应用节点不涉及缓存同步问题。
选择需要使用第三方二级缓存组件(如EHCache、Memcached等),在基于JPA
注解实体对象或SessionFactory的配置中定义缓存策略。
配置所选第三方缓存组件的配置文件。每种缓存组件都有自己的配置文件,因此
需要手工编辑它们的配置文件,并将它们放置在类路径下。对于EHCache来说,其配置文
件为ehcache.xml,而JBossCache的配置文件为treecache.xml。
我们采用EHCache缓存实现方案,首先我们通过SessionFactory的配置启用二级缓存
并定义缓存策略,这需要我们调整baobaotao-dao.xml对于sessionFactory Bean的配置。
代码清单17-11 baobaotao-dao.xml
…
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
…
<property name="hibernateProperties">
<props>
17.4 持久层开发
760
…
<!--① 使用EHCache缓存实现方案-->
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
<!--② 配置缓存策略-->
<property name="entityCacheStrategies">
<props>
<prop key="com.baobaotao.domain.Board">
nonstrict-read-write,fixedRegion
</prop>
<prop key="com.baobaotao.domain.User">
nonstrict-read-write,freqChangeRegion
</prop>
<prop key="com.baobaotao.domain.Topic">read-write,freqChangeRegion</prop>
<prop key="com.baobaotao.domain.Post">read-write,freqChangeRegion</prop>
</props>
</property>
</bean>
…
在①处,启用了二级缓存,通过hibernate.cache.provider_class指定了缓存实现类。这
里,我们使用EHCache实现方案。在②处定义了缓存策略,Board使用fixedRegion 缓存
区,这个缓存区中使用的对象永不过期且使用内存缓存。而User、Topic以及Post则使用
freqChangeRegion缓存区,因为它们数目较大,而且较易发生更改。
为了保证EHCache能够正常启用,我们需要将EHCache的类包复制到chapter17/
WebRoot/WEB-INF/lib 目录下,你可以在<Spring>/lib/ehcache/ehcache-1.2.4.jar中找到这个
类包。最后,还需要配置EHCache的配置文件,将其命名为ehcache.xml并放置到类路径
下(chapter17/ src/main/resources/)。来看一下ehcache.xml的配置内容。
代码清单17-12 ehcache.xml
<ehcache>
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="10000" eternal="false"
overflowToDisk="false" timeToIdleSeconds="0" timeToLiveSeconds="0"
diskPersistent="false" diskExpiryThreadIntervalSeconds="120" />
<!--①存放Board的缓存区-->
<cache name="fixedRegion" maxElementsInMemory="100"
eternal="true" overflowToDisk="false"/>
<!--② 存放User、Topic和Post的缓存区-->
<cache name="freqChangeRegion" maxElementsInMemory="5000" eternal="false"
overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="1800"/>
</ehcache>
761
第17章 实战案例开发
在①处定义的fixedRegion 缓存区不使用硬盘缓存,所有对象都在内存中,缓存区中
的对象永不过期,这非常适合缓存类似于Board的实例。在②处定义的freqChangeRegion
缓存区使用硬盘缓存,对象在闲置300秒后就从缓存中清除,且对象的最大存活期限为30
分钟,缓存区中最大的缓存实例个数为5000个,超出此限的实例将被写到硬盘中。这样,
我们就完成了Hibernate二级缓存的所有配置,当启用Spring时,二级缓存就会开始工作了。
需要注意的是,上述配置的EHCache只支持单机缓存(更改ehcache.xml配置,可以
支持分布式集群),也就是在群集环境中,每个应用节点的缓存都是相互独立、无法共享
的,这造成缓存命中率不高。如果Hibernate二级缓存要运行在群集环境中,需要第三方
缓存组件支持集群能力,目前比较常用的有EHCache、Memcached、JBossCache。其中
EHCache、JBossCache是基于Java语言的高效缓存组件,它们都支持分布式集群,支持多
种方式(JGroup)进行应用节点缓存的同步,缓存可以存储在内存或硬盘中。Memcached
服务端是基于C语言的高性能集中式缓存组件,客户端支持多种语言如Java、C、PHP等,
缓存只能存储在内存中。与分布式缓存不同的是,集中式缓存为每个应用节点提供统一的
缓存服务,因此每个应用节点不涉及缓存同步问题。
发表评论
-
js判断一个图片是否已经存在于缓存
2013-05-31 15:15 7182【解决】js判断一个图片是否已经存在于缓存(兼容IE各版本及 ... -
java 加密解密算法总结(转)
2013-03-19 11:28 801package tianya.cn.main; im ... -
深入了解Struts2返回JSON数据的原理及具体应用范例
2013-03-18 09:40 1115转载自: http://yshjava.iteye.com/ ... -
ICE:slice语言常识整理
2013-01-28 10:53 1719============================== ... -
ICE实例
2013-01-25 17:46 851本文将结合实际项目,做一个基于ice的实际项目实例应用,该实例 ... -
ICE转摘学习
2013-01-25 17:44 758Ice 出自ZeroC名门之 ... -
Google 浏览器css hack 写法
2013-01-16 11:09 703针对Chrome和Safari等Webkit核心浏览器的CS ... -
图片预加载做法
2012-12-18 17:34 757/** * 图片头数据加载就 ... -
js 事件冒泡
2012-11-19 14:40 846JavaScript事件冒泡简介及应用 一、什么是事 ... -
ant 常用命令
2012-11-12 22:03 1318C:\>ant -help\-h 获取ant的帮助信息( ... -
java 访问url获取别人的接口服务
2012-08-09 21:51 0** * 程序中访问http数据接口 ... -
Java IO系统之IO系统类层次关系
2012-08-08 09:13 0流是字节序列的抽象概念。 文件是数据的静态存储形式,而流 ... -
java缓存
2012-08-06 12:47 0JAVA缓存技术 JavaJNICacheL ... -
图片滚动带滚动条
2012-07-25 00:08 764<!DOCTYPE html PUBLIC " ... -
Web.xml文件配置
2012-06-12 23:56 727一个简单的web文件配置参考 <?xml versio ... -
java getResource()和getResourceAsStream以及路径问题(转)
2012-06-12 23:54 822用JAVA获取文件,听似简单,但对于很多像我这样的新人来说,还 ... -
MYSQL常用命令
2012-05-27 18:10 704MYSQL常用命令 1.导出整个数据库 mysqldump ... -
spring新的jar包名称,搭建框架列表
2012-04-28 13:12 868For a typical web application y ... -
图片垂直对齐的方法
2012-04-28 11:39 766<!DOCTYPE html PUBLIC " ... -
浅谈Java中的几种随机数
2012-04-20 23:51 504众所周知,随机数是任何一种编程语言最基本的特征之一。而生成随机 ...
相关推荐
传播智客,为Spring集成的Hibernate配置二级缓存、cache.xml
为Spring集成的Hibernate配置二级缓存
hibernate5.1二级缓存包
主要讲解hibernate缓存的配置和和使用方法,以及一级缓存和二级缓存的定义和区别,和查询缓存的使用
-- 查询的二级缓存配置 --> <property name="hibernate.cache.use_query_cache">true <property name="cache.provider_class">org.hibernate.cache.EhCacheProvider 4.0配置如下: <property name="hibernate...
基于springboot最新版本2.1.4.RELEASE,采用jpa为dao层框架,配置redis(redisson)为hibernate的二级缓存。
此配置和包,是springMVC4.3.3 +spring4+hibernate5.1.3+二级缓存ehcache(不用可以关闭)+fastjson。 是正常运行的项目里拷出来的,方便大家使用。
Hibernate EhCache 二级缓存配置
hibernate4配置ehcache二级缓存,以及相关的jar都在源码中。
hibernate配置二三级缓存
使用Hazelcast迁移hibernate的二级缓存.docx
一对一映射 hibernate优化配置一级二级缓存步骤 有图有真相
NULL 博文链接:https://364232252.iteye.com/blog/2369161
Hibernate允许在类和集合的粒度上设置第二级缓存。在映射文件中,和元素都有一个子元素,这个子元素用来配置二级缓存。 示例:以category(产品类别)和product(产品)的映射为例: 1) 修改要配置缓存的那个持久化类的...
它可以使用不同的缓存实现,如 EhCache 、 JBossCache 、 OsCache 等 (二级缓存是缓存实体对象的) 还有一个类型的 CACHE 就是 QueryCache . 它的作用就是缓存一个 Query 以及 Query 返回对象的 Identifier 以及...
hibernate的二级缓存的详细介绍,通过实例对二级缓存的配置步骤
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行... Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存
学习hibernate的必备,提供一个简易的流程图,方便记忆和查找
文档中说明了Hibernate二级缓存的事务范围、进程范围、集群范围的缓存配置。主要针对进程范围EhCacheProvider进行讲解,及查询缓存的讲解。