Hibernate缓存

Hibernate有两级缓存:一级缓存和二级缓存
1. 一级缓存
1)是session级别
2)一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中。
3)如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。
4)它是内置的事务范围的缓存,不能被卸载。
2. 二级缓存:是sessionFactory级,二级缓存只缓存对象,不缓存对象的属性。
查询缓存:属于二级缓存,能缓存hql。只有当hql完全相同时,连参数都要相同才能生效。只缓存对象的id。

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

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

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

原创文章,作者:纸飞机-JAVA追梦,如若转载,请注明出处:https://www.zfjsec.com/483.html
-- 展开阅读全文 --
JAVA课程通告
« 上一篇 09-02
纸飞机SEC—JAVA系列中级课程-第一节
下一篇 » 09-06

发表评论