1.二级缓存环境搭建
1.1导入jar包
Hibernate包下的lib\optional\ehcache下的jar包,其中有ehcache-core-2.4.3,hibernate-ehcache-5.0.1.Final
和slf4j-api-1.6.1三个jar文件。
1.2导入配置文件(ehcache.xml)
将ehcache.xml文件放在src文件夹下,该文件在 hibernate-release-5.0.1.Final\lib\optional\ehcache下的ehcache-core-2.4.3.jar
包中的 ehcache-failsafe.xml,并将其改名为ehcache.xml。
1.3开启二级缓存
在hibernate.cfg.xml文件中进行配置,开启二级缓存:
<property name="hibernate.cache.use_second_level_cache">true</property>
注册二级缓存区域工厂:
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
1.4配置缓存数据对象并发策略
方式一: 在.hbm.xml文件中配置
<class name="com.entity.Country" table="COUNTRY">
<!-- 指定该类为缓存对象,即类缓存 -->
<cache usage="read-only"/>
<id name="cid" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="cname" type="java.lang.String">
</property>
<!-- 级联保存cascade -->
<set name="ministers" cascade="save-update" fetch="select" table="MINISTER" inverse="false" lazy="true">
<!-- 指定该集合为缓存对象,即集合缓存 -->
<cache usage="read-only"/>
<key column="cid"/>
<one-to-many class="com.entity.Minister" />
</set>
</class>
方式二: 在.cfg.xml文件配置(集中配置)(推荐使用)
<!-- 指定类缓存 -->
<class-cache usage="read-only" class="com.entity.Country"/>
<class-cache usage="read-only" class="com.entity.Minister"/>
<!--指定集合缓存 -->
<collection-cache usage="read-only" collection="com.entity.Country.ministers"/>
2.Hibernate二级缓存
2.1hibernate支持的缓存插件
插件名 | 集群 | 物理介质 | Hibernate的查询缓存 |
---|---|---|---|
EHCache | 不支持 | 内存或硬盘 | 支持 |
OpenSymphony` | 支持 | 内存或硬盘 | 支持 |
SwarmCache | 支持 | 集群 | 不支持 |
JBossCache | 支持 | 集群 | 支持 |
2.2并发访问策略
transactional(事务型):缓存支持事务,发生异常的时候,缓存也能够回滚;
适用经常被读,很少修改的数据;可以防止脏读和不可重复读的并发问题。
read-write(读写型):更新缓存的时候会锁定缓存中的数据;
适用经常被读,很少修改的数据;可以防止脏读。
nonstrict-read-write(非严格读写型):不锁定缓存中的数据;
适用极少被修改,偶尔允许脏读的数据(两个事务同时修改数据的情况很少见)。
read-only(只读型):事务隔离级别低,并发性能高;适用从来不会被修改的数据(如参考数据);
适用从来不会被修改的数据(如参考数据)。