hibernate的二级缓存 I

hibernate的二级缓存

@sunRainAmazing

二级缓存

什么样的数据适合存放到第二级缓存中?
  1、很少被修改的数据
  2、不是很重要的数据,允许出现偶尔并发的数据
  3、不会被并发访问的数据
  4、参考数据
  不适合存放到第二级缓存的数据?
  1、经常被修改的数据
  2、财务数据,绝对不允许出现并发
  3、与其他应用共享的数据。

Hibernate的二级缓存

Hibernate提供了两级缓存,第一级是Session的缓存。
由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,
因此它的缓存是事务范围的缓存。第一级缓存是必需的,
不允许而且事实上也无法比卸除。
在第一级缓存中,持久化类的每个实例都具有唯一的OID。


  第二级缓存是一个可插拔的的缓存插件,它是由SessionFactory负责管理。
  由于SessionFactory对象的生命周期和应用程序的整个过程对应, 
  因此第二级缓存是进程范围或者集群范围的缓存。 
  这个缓存中存放的对象的松散数据。第二级对象有可能出现并发问题, 
  因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。 
  缓存适配器用于把具体的缓存实现软件与Hibernate集成。 
  第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。

1.什么是二级缓存?

SessionFactory级别的缓存,可以跨越Session存在, 
可以被多个Session所共享。

  Hibernate的二级缓存策略的一般过程如下:
  1) 条件查询的时候,总是发出一条select * from table_name where ….  
  (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。 
  
  2) 把获得的所有数据对象根据ID放入到第二级缓存中。 
  
  3) 当Hibernate根据ID访问数据对象的时候, 
  首先从Session一级缓存中查; 
  查不到,如果配置了二级缓存,那么从二级缓存中查; 
  查不到,再查询数据库,把结果按照ID放入到缓存。 
  
  4) 删除、更新、增加数据的时候,同时更新缓存。
  Hibernate的二级缓存策略,是针对于ID查询的缓存策略, 
  对于条件查询则毫无作用。 
  为此,Hibernate提供了针对条件查询的Query缓存。 

  Hibernate的Query缓存策略的过程如下:
  1) Hibernate首先根据这些信息组成一个Query Key,Query Key 
  包括条件查询的请求一般信息:SQL, SQL需要的参数, 
  记录范围(起始位置rowStart,最大记录个数maxRows),等。 
  
  2) Hibernate根据这个Query Key到Query缓存中查找对应的结果列表。 
  如果存在,那么返回这个结果列表; 
   如果不存在,查询数据库,获取结果列表, 
   把整个结果列表根据Query Key放入到Query缓存中。 
   
  3) Query Key中的SQL涉及到一些表名, 
  如果这些表的任何数据发生修改、删除、增加等操作, 
  这些相关的Query Key都要从缓存中清空。 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值