您的位置:首页 > 其它

我对Hibernate二级缓存的理解

2013-09-21 15:22 176 查看
1.Hibernate中两个级别的缓存

a) 第一级别的缓存是 Session 级别的缓存,它是属于事务范围的缓存。这一级别的缓存由 hibernate 管理的,一般情况下无需进行干预,也可以理解为基于某个线程的(每次回话就是一次线程访问)

b) 第二级别的缓存是 SessionFactory 级别的缓存,它是属于进程范围的缓存

2.二级缓存

a) 当使用load或者get方法的时候,会将查询的结果放置到session的一级缓存中(以OID判断对象的唯一性),同时会把数据放置到二级缓存中一份(散装数据),放到二级缓存中,(是类级别的)··放置到二级缓存后, 只要服务器不关,sessionFactory就不会关闭,那么数据不会丢失

b) 散装数据:存放的不是持久化对象,而是持久化对象中属性的值。当从二级缓存获取数据的时候,重新将数据封装到对应持久化对象中,所以每个持久对象是不同的

二级缓存的分类

1.类级别的二级缓存 (散装数据)

a) 将类的实例放置到缓存中,存放查询实体的真实值(散装数据)

2.集合级别的二级缓存

a)存放的查询条件(即OID),真实的实体在类级别的二级缓存中

3.Query(查询)级别的二级缓存

a) 存放的查询条件(即OID),真实的实体在类级别的二级缓存中

4.更新时间戳级别的二级缓存

a) * * 当程序执行新增、修改、删除的时候,会在时间戳缓存区域产生一个时间 T2

b) * 目的是为了保证二级缓存中的数据时最新的数据

c) * 当T1<T2,说明此时更新在后,查询在前,此时二级缓存中存放的不是最新的数据,要想保证二级缓存中仍然存放的是最新的数据,那么就要再次查询数据库,从而获取到最新的数据

d) 当T1>T2,说明此时更新在前,查询在后,此时二级缓存中存放的是最新的数据,那么如果再次获取二级缓存中的数据的时候,不用再查询数据库,获取的是新的数据

1.缓存中存放的数据

a) 适合放入二级缓存的数据

i. 很少被修改

ii. 不是很重要的数据,允许出现偶尔的并发

b) 不适合放入二级缓存的数据

i. 经常被修改的数据

ii. 财务数据,绝对不允许出现并发问题

iii. 与其应用数据共享的数据

2.开启缓存不用所有的查询都通过数据库了(提高了查询效率),且二极缓存基于进程,只要服务器不关,所有访问者都可以使用该缓存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: