hibernate_二级缓存(second cache)

本文详细介绍Hibernate二级缓存的配置方法及使用技巧,包括选择合适的缓存框架、配置缓存策略、实现缓存分区等关键步骤,并提供统计缓存使用情况的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适合用二级缓存的对象:

该对象读的次数远远大于写的次数. 如果每次读出来是为了写(即频繁写的对象),则不适合放入二级缓存.

因为如果一个经常写的对象放入二级缓存, hibernate 需要经常修改二级缓存里存放的该对象, 即锁住map, 其他线程就会锁在这, 性能差.

下面介绍二级缓存如何使用:

(1) 告诉hibernate 你使用哪个缓存框架( 以ehcache 为例 ), 在hibernate 配置文件中加这两句代码:

<property name="cache.use_second_level_cache">true</property>
<property name="cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
(2) 导入选定的缓存框架相应jar 包:

hibernate-release-5.2.10.Final \ lib\optional \ ehcache 目录下的所有jar 包.

(3)告诉hibernate 哪些类型的对象需要放入二级缓存:

<class-cache usage="read-write" class="cd.itcast.day5.cache.Employee"/>
(4)将encache 的配置文件拷到类路径.(即: 将hibernate-release-5.2.10.Final \ project \ etc \ encache.xml 拷贝到src目录).


到此, 二级缓存就使用上了. 如果你还想进行缓存分区( 即: 将指定数据放入指定的缓存地区. 类似于QQ会员一样), 按以下步骤即可实现:

1) 在ehcache.xml 中配置一个cache:

<cache name="cditcast.employee"
        maxElementsInMemory="100"
        eternal="true"
        overflowToDisk="true"
        />
2) 在hibernate配置文件中声明缓存地区的前缀(prefix):

<property name="cache.region_prefix">cditcast</property>
3) 在告诉hibernate 指定对象需要放入二级缓存时, 指定放入的缓存地区:

<class-cache usage="read-write" class="cd.itcast.day5.cache.Employee" region="employee"/>


如果你需要统计二级缓存的使用信息( 便于跳转缓存策略 ), 可按以下步骤实现:

<1>在hibernate 配置文件中, 添加: 

<property name="generate_statistics">true</property>
<2>在需要打印统计信息的地方调用以下方法( 其实就是通过SessionFactory 获取Statistics ):

	//打印统计信息
	private void printStatistics(){
		SessionFactory factory = HibernateUtil.getInstance().getSessionFactory();
		Statistics s = factory.getStatistics();
		System.out.println("puts="+s.getSecondLevelCachePutCount());
		System.out.println("hit="+s.getSecondLevelCacheHitCount());
		System.out.println("miss="+s.getSecondLevelCacheMissCount());
		System.out.println("-------------------------");
	}
扩展一点小知识: 
如果使用的主键生成策略,在对象保存进数据库之前就可以确定主键, 则save() 会将对象放入二级缓存.

<generator class="native"/>  数据库生成主键,意味着对象只有在保存进数据库时才会确定主键.



下面介绍不同的缓存策略(即: usage 的值), 以及二级缓存和一级缓存的介绍:









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值