Hibernate 缓存
一、什么是缓存,缓存的作用
Hibernate是一个持久层框架,经常访问物理数据库,使用缓存可以降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。
缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。 Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理数据源中检索,所以,把频繁使用的数据加载到缓存区后,就可以大大减少应用程序对物理数据源的访问,使得程序的运行性能明显的提升。
二、Hibernate缓存分类
Hibernate缓存有两大类:
一级session级别缓存:属于Hibernate的内置缓存,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓存);由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存
二级SessionFactory级别缓存:由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别;第二级缓存是可选的,是一个可配置的插件;(什么样的类被适合放在二级缓存中:a: 经常被访问的数据;b: 数据量有限;c:改动少;如:用户的权限、组织机构等)。
三级缓存又成为查询缓存,是二级缓存的一种特殊情况。
三、怎么应用Hibernate缓存
1、 一级缓存
load()
Result:两次查询,只发一次SQL请求
在不同session里查询
Result:
hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,多线程查询数据,每次都要去不同的session里查找,这种情况下的查询,每个session关闭的时候,一级缓存就失效了。所以可以利用二级缓存解决此问题。
2、 二级缓存(The Second Level Cache)
(1)、二级缓存是SessionFactory级别的全局缓存。Hibernate支持多种多样的二级缓存实现,Hibernate自己写的HashTableCatcheProvider只是用在测试里,真正的产品里不会用它,由其他的厂商来提供。
(2)、EhCatcheProvider是Hibernate3.2默认的提供方式,支持范围为内存,硬盘等,如果内存放不下了,它会存到本地硬盘上,这样相对于远程数据库也是比较快的
(3)、打开二级缓存
I:hibernate.cfg.xml的配置
II:@Cache注解
(4)、ehcache.xml配置
ehcache.xml真正指明了怎么设置二级缓存,而且可以写自己的缓存策略。
默认缓存策略
自定义缓存策略
(5)、测试
配置好二级缓存,在不同的session里查询相同的sql语句就不再有第二次sql请求
注:Load()、iterate()默认使用二级缓存;list()默认往二级缓存加数据,但查询的时候不使用;List将从数据库查出的数据放入缓存,因为每次查询条件不能保证一样,所以无法从缓存中查询;
List():
Iterate()
Result:
3、 查询缓存
(1)、概念:特殊的二级缓存,是指的重复查询的缓存,如果查询条件不一样,那就用不了缓存,没有相应的算法去实现;
(2)、配置:
查询缓存是依赖于二级缓存的,所以首先要打开配置好二级缓存
(3)、实例:
(4)、测试:
发两条List请求,不会产生两条SQL语句,而且是可以在不同的session中
四、总结
Hibernate查找对象如何应用缓存?
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存;删除、更新、增加数据的时候,同时更新缓存。
Hibernate管理缓存实例
无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。当随后flush()方法被调用时,对象的状态会和数据库取得同步。如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。
相关推荐
在Java的持久化框架Hibernate中,二级缓存和分页功能是两个重要的优化手段,能够显著提升应用程序的性能和用户体验。下面将详细讲解这两个概念及其实际应用。 **一、Hibernate二级缓存** Hibernate一级缓存是指...
【域模型的状态与Hibernate缓存理解】 在Java的持久化框架Hibernate中,域模型的状态管理是优化数据库操作的关键。域模型通常指的是实体类,如这里的`Customer`类,它们代表数据库中的表记录。域模型有以下几种状态...
7. **缓存机制**:Hibernate内置了第一级缓存(Session缓存)和第二级缓存,提高数据访问速度。通过合理的缓存策略,可以有效地提高应用性能。 8. **实体关系映射**:包括一对一、一对多、多对一、多对多四种关系。...
4. **缓存机制**:为了提高性能,Hibernate支持多种缓存策略,书中详细介绍了如何合理地使用这些缓存选项。 5. **查询语言**:Hibernate提供了强大的查询语言HQL(Hibernate Query Language),用于执行复杂的数据库...
此外,Hibernate 还提供了二级缓存,它是一个跨 Session 的区域,可以提高数据读取性能。 五、session 操作数据 通过 Session,开发者可以执行 CRUD(创建、读取、更新和删除)操作。例如,使用 `save()` 或 `...
5. **缓存支持**:Hibernate提供了第一级缓存和第二级缓存,通用DAO可以根据需求选择是否开启和配置缓存,提高数据读取速度。 6. **实体转换**:将数据库查询结果转化为对应的Java对象,通常是通过`Session.load()`...
6. **缓存策略**:Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的)。合理利用缓存能提高性能,但需注意缓存一致性问题。 7. **性能优化**:包括延迟加载(Lazy Loading)、批处理...
4. **第二级缓存**:Hibernate 4.2.21.Final支持第二级缓存,可以提高应用程序性能。它可以存储已查询的数据,减少对数据库的直接访问。常用的第二级缓存提供商如Ehcache和Infinispan可以在Hibernate中集成。 5. **...
Hibernate的核心模块包含了ORM框架的主要功能,如实体管理、查询语言(HQL)、事件处理和缓存机制。它提供了SessionFactory和Session接口,前者是线程安全的,用于创建Session实例;后者是数据库会话,负责执行数据库...
3. 数据缓存:通过二级缓存机制,提高数据访问效率,减少对数据库的直接访问。 4. 支持事务:提供了事务管理和回滚机制,保证数据一致性。 5. 支持多种数据库:Hibernate可以轻松切换不同的数据库,如MySQL、...
7. **配置文件**:如`hibernate.cfg.xml`,用于设置数据库连接参数、缓存策略等,它是启动Hibernate会话工厂的关键。 在使用Hibernate 3.2.ga时,开发者需要创建实体类来表示数据库表,编写映射文件(通常是`.hbm....
Hibernate提供了缓存机制,如一级缓存(Session级别的)和二级缓存(SessionFactory级别的),以提高性能。另外,合理的配置和使用批处理、延迟加载等特性也能有效提升应用性能。 10. 扩展与进阶: Hibernate支持...
7. **缓存**: Hibernate提供了二级缓存机制,可以通过插件如Ehcache或Infinispan来实现,提高数据访问速度。 8. **事件和监听器**: Hibernate允许开发者注册监听器,对对象生命周期的各个阶段(如加载、保存、更新...
4. 缓存机制:Hibernate包含一级缓存(Session级缓存)和二级缓存(SessionFactory级缓存),以及查询缓存,有效提高数据访问速度。 四、核心类详解 1. EntityPersister:负责实体的持久化操作,包括保存、更新、...
### 马士兵Hibernate学习笔记知识点总结 #### 一、课程内容概览 - **HelloWorld**:通过简单的示例程序介绍如何启动一个基于Hibernate的Java项目。 - **Hibernate原理模拟**:解释O/R Mapping的概念及其重要性。 -...
理解ORM的概念,熟悉Java Persistence API(JPA),掌握HQL和Criteria API的使用,以及了解Hibernate的事务管理和缓存机制,都是成为Hibernate专家的关键步骤。 总之,这四本书籍构成了一个全面的学习路径,从基础...
总之,Hibernate集合映射是对象关系映射的重要组成部分,理解并熟练掌握各种映射类型、级联操作、缓存策略等,将有助于我们在实际开发中更高效、更灵活地处理数据库与Java对象之间的关系。在实践中,不断调整和优化...
优化是任何系统开发中的重要环节,对于Hibernate而言,可能涉及到缓存策略、批处理、延迟加载等方面的调整,以提高系统的响应速度和减少数据库压力。 12. **补充话题** 除了基础内容外,笔记还可能包含一些扩展...
- **第二级缓存**:Hibernate如何支持缓存机制,提高数据访问效率,包括查询缓存和集合缓存。 - **事务管理**:Hibernate如何集成JTA(Java Transaction API)或JDBC事务,实现事务的ACID特性。 - **HQL...