Hibernater基础之缓存下


1.一级缓存的概念

1.1.Hibernate一级缓存又被称作Session缓存和会话缓存。

1.2.通过Session从数据中查询出实体会将实体在内存中保存起来,下一次查询同一实体时候就不必查询数据库而是从内存中获取,这就是缓存。

1.3.一级缓存的生命周期和Session相同的,Session销毁,缓存也会消失。

1.4.一级缓存使用的范围在当前会话中。

2.一级缓存的API

2.1.一级是无法取消的是Hibernate默认的,通过两个方法管理

2.2.evict():用于将某个对象从Session缓存中消除

2.3.clear():将缓存中的所有对象都删除

注明:有时候一级缓存也会对性能产生影响

2.4.当我们在一个会话中多次使用query.list()执行同一HQL语句时候,我们是会在此发送HQL语句的(query.list()方法是不会使用缓存的)。

2.5.query.iterate()方法进行查询时候同样也会发送HQL语句不过仅仅查询一列(首先从表中查询出编号,然后从缓存中根据编号查询对应的对象,找到返回没有找到则发送HQL语句去数据库查询对应的信息)。

2.6.contains:判断指定的对象是否存在于一级缓存中。

2.7.flush:刷新一级缓存中的内容使其与数据库保持一致。

3.二级缓存的概念

3.1.应用的场景:有些常用的数据,我们在以后Session缓存之后,也希望在其他Session使用而不用再次缓存。

3.2.二级缓存是在每个Session中公用的缓存。

3.3.二级缓存不是默认开启的需要自己手动配置一共分为四步:

3.3.1.添加二级缓存对应的JAR包

3.3.2.在hibernate配置文件中增加关于Provider类的描述

<!—指定二级缓存外部的实现类-->
<property name=”cache.provide_class” >net.sf.ehcache.hibernate.EhcacheProvider </property>


3.3.3.添加二级缓存的属性配置文件

1)将ehcache.xml配置文件添加到src的目录下

3.3.4.在需要被缓存的表的映射文件中添加<cache />标签

1)<cache usage=”read-only” />

2)如果存在一对多关系,在缓存一方时候也希望就多的一方缓存起来,则需要在一方的关系对象映射文件中的集合属性下添加<cache />标签,不然Hibernate仅仅会缓存多放的OID。

3.4.<catche />标签的详细介绍

3.4.1.usage(缓存策略/事物模式):transactional、read-write、nonstrict-read-write、read-only

3.4.2.include:non-lazy(我们当前缓存当前对象并不缓存延迟加载的属性)、all

3.4.3.region:名字自取,表示我们可以在ehcache.xml文件中我们可以针对组或者单张表进行缓存策略的配置

4.一级缓存和二级缓存的区别

4.1.二级缓存也称为全局缓存和应用级缓存,是适用于当前所有的会话,也是插拔式自己配置的缓存;一级缓存也被称为Session缓存和会话缓存,是Hibernate默认的无法卸载和取消的。

4.2.二级缓存适用于:

4.2.1.很少修改的数据。

4.2.2.不是很重要的数据。

4.2.3.允许偶尔出现并发的数据。

4.2.4.不是被高并发的数据,参考的数据。

4.3.一级缓存适用于:

4.3.1.经常被修改的数据

4.3.2.绝对不允许出现并发访问的数据,如银行的钱

4.3.3.与其他应用共享的数据

4.4.


5.总结

5.1.Hibernate的缓存能够提高检索效率。

5.2.Hibernate缓存分为一级缓存和二级缓存,一级缓存是会话级缓存,二级缓存是应用级缓存。

5.3.Hibernate缓存在提高索引效率的同时也增加了服务器的消耗,所以注意缓存的使用策略。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值