hibernate二级缓存

hibernate二级缓存中包含四大区域

(1)类级别的缓存

类级别的缓存区域

 * 存放的是对象的散装数据,散装数据使用OID从新组织一个新的对象,散装数据中存放的是类中属性的值

(2)集合级别的缓存

集合级别的缓存区域

 * 存放的是对象的OID,如果要想获取真正的实体对象,还要到类级别的二级缓存中获取

 

总结:集合级别的缓存依赖于类级别的缓存

(3)查询级别的缓存

查询级别的缓存区域(重点),查询缓存指Query接口,Query接口支持HQL语句

1:存放的是hql语句的查询结果。

2:如果查询的是实体对象,此时将实体对象的值封装到类级别的缓存区域,需要使用OID查询类级别的缓存区域,获取数据,即如果需要获取真正的实体对象,还要到类级别的二级缓存中获取

3:如果查询的是投影条件,此时查询缓存将查询结果封装到查询缓存中,不会依赖于类级别的缓存。

总结:查询缓存封装的是hql语句的检索结果:

如果是hql语句的投影查询,查询缓存封装投影查询的结果

如果是hql语句的对象查询,查询缓存中存放OID,需要使用OID查询类级别的缓存区域

(4)更新时间戳级别的缓存

更新时间戳级别的缓存区域

 * (1)将查询的对象放置到类、集合、查询级别的二级缓存中一份,而且设置放置对象的时间T1

 * (2)当执行增、删、改操作的时候,更新时间戳会记录一个时间T2

 

如果当T1>T2的话,说明查询在后,更新在前,说明二级缓存中存放的数据是最新数据,那么此时从二级缓存中获取数据,不会查询数据库

 

如果当T1<T2的话,说明查询在前,更新在后,说明二级缓存中存放的数据不是最新数据,那么此时从二级缓存中获取数据,会查询数据库,查询到最新的结果

 

作用:保证二级缓存中的数据是最新的数据


本文出自 “Spring” 博客,谢绝转载!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。