hibernate 使用二级缓存 配置
配置二级缓存主要有两个步骤。
选择需要使用第三方二级缓存组件(如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"
/>
<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等,
缓存只能存储在内存中。与分布式缓存不同的是,集中式缓存为每个应用节点提供统一的
缓存服务,因此每个应用节点不涉及缓存同步问题。