论坛首页 Java企业应用论坛

Hibernate第二级缓存(转载)

浏览 1199 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2010-03-21   最后修改:2010-03-21

    什么样的数据适合放到第二级缓存中?

 

    1.很少被修改的数据

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

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

 

    不适合存放到第二级缓存的数据?

 

    1.经常被修改的数据

    2.财务数据,绝对不允许出现并发

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

 

    Hibernate的二级缓存

 

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

 

    Hibernate的二级缓存策略的一般过程如下:

 

    1.条件查询的时候,总是发出一条select * from table_name where ....(选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象。

    2.把获得的所有数据对象根据ID放入到第二级缓存中。

    3.当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,在查询数据库,把结果按照ID放入到缓存

    4.删除,更新,增加数据的时候,同时更新缓存

 

    二级缓存的管理:

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

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

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

 

    Hibernate的二级缓存策略,是针对ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query缓存。

    Hibernate的Query缓存策略的过程如下:

    1.Hibernate首先根据这些信息组成一个QueryKey,QueryKey包括条件查询的请求一般信息:SQL,SQL需要的参数,记录范围(起始位置rowStart,最大记录个数maxRows)等

    2.Hibernate根据这个QueryKey到Query缓存中查找对应的结果列表。如果存在,那么返回这个结果列表;如果不存在,查询数据库,获取结果列表,把整个结果列表根据QueryKey放入到Query缓存中

    3.QueryKey中的SQL涉及到一些表名,如果这些表的任何数据发生修改,删除和增加等操作,这些相关的Querykey都要从缓存中清空

 

    查询缓存与二级缓存配合使用,当利用QueryKey到Query缓存中查找对应的结果列表是ID列表,需要到二级缓存中根据ID进行查询

 

 

 

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics