Hibernate提供了两级缓存,第一级是Session的缓存。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必需的,不允许而且事实上也无法比卸除。在第一级缓存中,持久化类的每个实例都具有唯一的OID。
第二级缓存是一个可插拔的的缓存插件,它是由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此第二级缓存是进程范围或者集群范围的缓存。这个缓存中存放的对象的松散数据。第二级对象有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。缓存适配器用于把具体的缓存实现软件与Hibernate集成。第二级缓存是可选的,可以在每个类或每个集合的粒度上配置第二级缓存。
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都要从缓存中清空。
Hibernate的二级缓存原理非常类似于Jdon框架(可见JF开发指南)。
虽然原理类似,但是区别在于:通过Jdon框架可灵活指定缓存位置,如缓存设置在持久层前面,这就象Hibernate缓存;但是也可以设置在更前面,如业务层前面,而且也可以实现持久层和业务层前的共用一个缓存,这些都以及在JiveJdon3中实现。
缓存提前访问的好处是:表现层的请求不必经过业务层直接得到缓存,节省业务层开销,缓存越靠近用户界面端,性能越好,查询越频繁使用,缓存击中率越高,各方面消耗就越小,最好缓存在客户端,这也是胖客户端一个性能优势。
分享到:
相关推荐
本文将深入探讨Hibernate二级缓存的基本概念、工作原理及如何通过示例源码实现。 ### 1. 二级缓存概述 Hibernate的一级缓存是Session级别的,它自动管理对象的状态,提供瞬时、持久化和脱管状态之间的转换。然而,...
一、Hibernate二级缓存概念 Hibernate的一级缓存是指Session级别的缓存,每个Session内部都有一个一级缓存,用于存储实体对象,当Session关闭时,一级缓存中的数据也会被清除。而二级缓存则是一个SessionFactory级别...
通过以上步骤,我们就成功地在Spring Boot 2.1.4.RELEASE项目中配置了使用Redis作为Hibernate二级缓存的环境。这将显著提升数据库查询效率,减少对数据库的压力,尤其在高并发场景下,效果尤为明显。记得在实际生产...
**一、二级缓存概念** 一级缓存是每个Hibernate Session内部的一个内存区域,用于存储Session期间的操作对象。当Session关闭时,一级缓存中的对象会随之消失。而二级缓存则是一个独立于SessionFactory的缓存,可以...
一、二级缓存概念 在 Hibernate 中,一级缓存是每个 Hibernate 会话内部的私有缓存,负责存储实体对象。而二级缓存则是一个跨会话的共享区域,可以被多个会话共同访问。它是由应用程序与缓存提供商(如 Ehcache、...
**一、Hibernate二级缓存** Hibernate一级缓存是指Session级别的缓存,它是默认开启的,每个Session都会维护一个对象缓存,用来存放该Session加载的实体对象。一级缓存的生命周期与Session相同,当Session关闭时,...
本文将详细讲解Hibernate二级缓存的概念、工作原理,并结合给定的"ehcache.xml"配置文件和"Hibernate二级缓存架包",阐述如何设置和使用二级缓存。 一、Hibernate二级缓存概述 1.1 一级缓存与二级缓存的区别 一级...
这个"Hibernate二级缓存实例"压缩包文件提供了一个实际的示例,帮助我们更好地理解这一概念。 首先,我们需要了解什么是Hibernate的一级缓存和二级缓存。一级缓存是SessionFactory级别的,每个Session都有一个一级...
通过本次实验,不仅深入了解了Hibernate二级缓存的基本概念和工作原理,还掌握了如何通过配置来优化二级缓存的使用。实践证明,合理的缓存策略能够显著提升系统的性能表现。在实际开发过程中,还需要结合具体的应用...
**一、Hibernate二级缓存概念** 二级缓存分为进程内缓存(如EHCache)和分布式缓存(如Infinispan)。它们将数据存储在内存中,以快速访问。当某个实体被频繁读取但很少更新时,二级缓存尤其有效。 **二、为什么要...
在IT行业中,数据库操作是...在给出的压缩包文件"hibernate3_day03"中,可能包含了与Hibernate二级缓存相关的代码示例、配置文件或者教程文档,进一步的学习和实践可以从这些资源入手,加深对二级缓存的理解和运用。
标题中的“Hibernate二级缓存:集合缓冲区特点”是指在使用Hibernate进行数据库操作时,对二级缓存中集合数据管理的特性和优化策略。Hibernate是一个流行的Java ORM(对象关系映射)框架,它允许开发者以面向对象的...
本文将详述如何在项目中使用Hibernate与Memcached结合实现二级缓存,并探讨Memcached的基本原理和使用方法。 首先,我们需要理解什么是Hibernate的二级缓存。在Hibernate框架中,一级缓存是每个Session级别的,它...
**hibernate二级缓存详解** 在Java的持久化框架Hibernate中,二级缓存是一个重要的性能优化手段。它能够显著提升应用的响应速度,通过存储经常访问的数据来减少数据库的I/O操作。本文将深入探讨Hibernate的二级缓存...
同时,理解一级缓存的原理也有助于我们理解二级缓存和其他缓存解决方案,如Ehcache和Infinispan,以及它们在复杂分布式系统中的应用。 总之,Hibernate的一级缓存是提高应用程序性能的关键因素之一。理解其工作原理...