java hibernate 缓存机制_Hibernate的缓存机制

Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存有Hibernate自身管理,一般情况下不需要进行干预;第二级别的缓存是SessionFactory的缓存,它是属于进程范围或集群范围的缓存。这一级别的缓存可以进行配置和更改并且可以动态加载和卸载。Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级别的缓存。

Hibernate提供的一级缓存

hibernate是一个线程对应一个session,一个线程可以看成一个用户。也就是说session级缓存(一级缓存)只能给一个线程用,别的线程用不了,一级缓存就是和线程绑定了。

hibernate一级缓存生命周期很短,和session生命周期一样,一级缓存也称session级的缓存或事务级缓存。如果tb事务提交或回滚了,我们称session就关闭了,生命周期结束了。

一级缓存的管理:

evit(Object obj)将指定的持久化对象从一级缓存中清除,释放对象所占用的内存资源,指定对象从持久化状态变为脱管状态,从而成为游离对象.

clear()将一级缓存中的所有持久化对象清除,释放其占用的内存资源

contains(Object obj)判断指定的对象是否存在于一级缓存中.

flush()刷新一级缓存区的内容,使之与数据库数据保持同步.

二级缓存的管理:

evict(Class arg0, Serializable arg1)将某个类的指定ID的持久化对象从二级缓存中清除,释放对象所占用的资源.

Java代码  d68a9e56888122473b1be81c172b9f64.png

sessionFactory.evict(Customer.class, new Integer(1));

evict(Class arg0)将指定类的所有持久化对象从二级缓存中清除,释放其占用的内存资源.

Java代码  d68a9e56888122473b1be81c172b9f64.png

sessionFactory.evict(Customer.class);

evictCollection(String arg0)将指定类的所有持久化对象的指定集合从二级缓存中清除,释放其占用的内存资源.

Java代码  d68a9e56888122473b1be81c172b9f64.png

sessionFactory.evictCollection("Customer.orders");

Hibernate的二级缓存的配置

二级缓存需要sessionFactory来管理,它是进初级的缓存,所有人都可以使用,它是共享的。

首先,不是所有的数据都适合放在二级缓存中,看一下,什么样的数据适合放在二级缓存中来?什么样的数据不适合放在二级缓存中来?

下面这几种情况就不适合加载到二级缓存中:

1.经常被修改的数据

2.绝对不允许出现并发访问的数据

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

下面这己种情况合适加载到二级缓存中:

1.数据更新频率低

2.允许偶尔出现并发问题的非重要数据

3.不会被并发访问的数据

4.常量数据

5.不会被第三方修改的数据

Hibernate的二级缓存功能是靠配置二级缓存插件来实现的,Hibernate为了集成这些插件,Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器 .

常用的二级缓存插件

EHCache  org.hibernate.cache.EhCacheProvider

OSCache  org.hibernate.cache.OSCacheProvider

SwarmCahe  org.hibernate.cache.SwarmCacheProvider

JBossCache  org.hibernate.cache.TreeCacheProvider

简单介绍一下EHCache的配置

hibernate.cfg.xml

Xml代码  d68a9e56888122473b1be81c172b9f64.png

org.hibernate.cache.EhCacheProvider

true

ehcache.xml

Xml代码  d68a9e56888122473b1be81c172b9f64.png

****.hbm.xml

Xml代码  d68a9e56888122473b1be81c172b9f64.png

hibernate-mapping PUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值