hibernate的二级缓存 I

来源:互联网 发布:template.js helper 编辑:程序博客网 时间:2024/06/08 16:32

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都要从缓存中清空。