Hibernate中的缓存机制

1.一级缓存

一级缓存:session级别的缓存,当我们使用了get/load/find/Query等,查询出的数据,默认在session中就会有一份缓存数据,缓存数据就是从数据库将一些数据拷贝一放到对应的地方.每次获取数据时,会先从缓存中查找, 如果再去数据库查询,提高了查询效率,减少了数据库的直接操作. 一级缓存不可卸载(只要使用session肯定就用到了session的缓存,是hibernate控制的 我们不能手动配置).

  2. 二级缓存

二级缓存是sessionFactory级别的缓存,(比session的作用范围要广), 可以做到多个session共享此数据.
 

1).sessionFactory缓存分类:

a).内缓存:存储着预制的sql语句,对象和数据库的映射信息

b).外缓存:存储的是我们允许使用二级缓存的对

 2).二级缓存使用场景:

a).不经常进行改动的信息,多次查询的信息

b).对数据并发时的安全没有要求,

3).查询数据规则:先从一级缓存中查找如果没有在从二级缓存中查找 如果还没有,再从数据库中查询.

3.二级缓存的配置流程

1.1)在cfg文件中打开二级缓存(默认是false)
1.2)指定使用二级缓存的factory
1.3)在mapping下配置要使用的二级缓存的类,也可以在hbm文件的class中通过cache标签设置.
2.在cfg的同级目录下配置ehcache.xml文件
2.1)disStore 配置的缓存磁盘的路径
2.2)default-cache 默认配置
2.3)cache 某个需要缓存的类单独设置

<!--二级缓存的配置代码实现  -->
            <!--  默认是不使用二级缓存,设置使用二级缓存-->
            <property name="hibernate.cache.use_second_level_cache">false</property>
            <!-- b. 指定使用哪一个缓存框架(默认提供的) -->
<!--<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> -->
            <!-- 开启查询缓存
            如果没有开启二级缓存,只开启了查询缓存此时,二级缓存中只存储查询出来的数据的id,如果后续在查询相同的数据,根据缓存中的id分条查询数据
            -->
            <property name="hibernate.cache.use_query_cache">true</property>

<propertyname="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
            <!-- 指定哪一些类,需要加入二级缓存 -->
            <mapping resource="com/xalo/model/ClassRoom.hbm.xml"/>
            
            <!-- 指定使用二级缓存的对象并指定并发策略-->
            <class-cache usage="read-only" class="com.xalo.model.ClassRoom"/>

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊掌渔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值