理解Session的缓存
当Session的save()方法持久化一个Customer对象是,Customer对象被加入到Session的缓存中,以后即使应用程序中的引用变量不再引用Customer对象,只要Session的缓存还没有被清空,Customer对象仍然处于生命周期中。
当Session的load()方法试图从数据库中加载一个Customer对象时,Session先判断缓存中是否已经存在这个Customer对象,如果存在,就不需要再到数据库中检索。
调用了Session的某个方法,例如save()方法就纳入到缓存里面。那个Session就会存在一个引用去指向这个对象,这时候这个对象就不会被收集器所收掉。当Session被关闭掉之后,某个引用就不再指向他了,那么这个对象可能给垃圾回收机制所回收。
Session的缓存作用
减少访问数据库的频率。应用程序从内存中读取持久化对象的速度显然比到数据库中查询数据的速度快多了,因此Session的缓存可以提高数据访问的性能。
保证缓存中的对象与数据库中的相关记录保存同步。当缓存中持久化对象的状态发生了变化,Session并不会立即执行相关的sql语句,这使得Session能够把几条相关的sql语句合并为一条sql语句,以便减少访问数据库的次数,从而提高应用程序的性能。
Session清理缓存
清理缓存是指按照缓存中对象的状态的变化来同步更新数据库。
当Session执行事物的提交的时候就会自动执行update语句(commit()),使得内存中对象与数据库中的记录信息一致,使得更新能几时提交到数据库中。
清理缓存的时间点
Session在下面的时间点清理缓存:
—当应用程序调用org.hibernate.Transaction的commit()方法的时候,commit()方法先清理缓存,然后在向数据库提交事物。
—当应用程序显式调用Session的flush()方法的时候。
Hibernate的二级缓存结构
Hibernate提供了两级缓存,第一级缓存是Session的缓存。由于Session对象的生命周期通常对应一个数据库事物或者一个应用事物,因此它的缓存是事物范围的缓存。第一级缓存是必须的,不允许而且事实上也无法被卸除。在第一级缓存中,持久化类的每个实例都具有唯一的OID。
第二级缓存是一个可插拔的缓存插件,他由SessionFactory负责管理。由于SessionFactory对象的生命周期和应用程序的整个进程对应,因此第二级缓存是进程范围的缓存。这个缓存中存放的是对象的散装数据。第二级缓存是可选的,可以在每个类或每人集合的粒度上配置第二级缓存。
分享到:
相关推荐
【理解Session机制】 Session机制是Web应用程序中用来保持用户会话状态的一种技术。在HTTP协议中,由于其无状态特性,每次请求都是独立的,无法识别同一用户的不同操作。为了解决这个问题,服务器端引入了Session,...
12. 理解Session缓存的作用,配置第二级缓存。 13. 明白事务在Hibernate中的重要性。 14. 理解JavaBean对象在Hibernate应用中的不同状态。 15. 熟悉处理关联关系的域模型对象持久化前的准备工作。 16. 理解映射文件...
总的来说,理解和熟练运用Hibernate的缓存机制以及Session的管理方式,对于优化应用性能、减少数据库负载至关重要。在实际开发中,开发者应根据项目需求和性能要求,合理配置和使用缓存,以及选择合适的Session管理...
理解session的工作原理,合理配置和管理session,是构建高效、安全的Web应用的关键。 参考文档: 1. 《Web应用开发中的session管理》 2. 《Java Web编程中的session深入解析》 3. 《HTTP协议详解》 4. 《Cookie与...
**hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,...理解并掌握这些缓存机制,对于优化Hibernate应用至关重要。在实践中,合理配置和管理缓存,是每个专业Java开发人员必备的技能之一。
通过运行测试,我们可以观察到不同缓存机制如何工作,比如一级缓存如何避免重复的数据库访问,二级缓存如何在多个Session间共享数据,以及查询缓存如何提高重复查询的性能。 总的来说,理解和合理使用Hibernate的...
Session缓存** - **一级缓存**: Session 的一级缓存是由其实现类 `SessionImpl` 中的 `persistenceContext` 属性所包含的一系列 Java 集合构成。这些集合用来存储通过 Session 加载的对象。当应用程序通过 Session...
标题中的“使用redis管理对象缓存,可代替session”指的是在Web应用中,利用Redis作为对象缓存系统来替代传统的HTTP Session。Redis是一款高性能的Key-Value存储系统,它可以用来存储临时性的数据,如用户的Session...
首先,我们来理解`Session`的基本概念。`Session`是ASP.NET提供的一种服务器端存储机制,它为每个用户分配一个唯一的ID(SessionID),并将这个ID通过cookie或URL重写返回给客户端。当用户后续请求到达时,服务器...
一级缓存,也称为Session缓存,是每个Hibernate Session实例私有的。当Session执行查询操作时,会将结果存储在一级缓存中。如果同一Session再次执行相同的查询,Hibernate将直接从一级缓存获取数据,避免了重复的...
在提供的压缩包文件“SSH-补充”中,可能包含了关于如何在 SSH 框架下配置和使用 Hibernate 缓存的相关资料,包括代码示例、配置文件模板等,可以帮助深入理解和实践 Hibernate 缓存的使用。 综上所述,Hibernate ...
下面将详细介绍如何开启并理解这两个缓存机制。 ### 1. 一级缓存与二级缓存 #### 1.1 一级缓存 一级缓存是 Hibernate 内置的 Session 缓存,它是每个 Hibernate Session 的私有缓存。当对象被加载到 Session 中时...
对于大型网站,可能还会引入Session缓存或分布式Session存储,如Redis或Memcached,来缓解服务器压力。 在“源码”和“工具”标签的提示下,我们可以推断文章可能涉及了Cookie和Session的实现细节,或许还涵盖了...
在深入理解Hibernate缓存机制时,查看源码可以帮助我们了解其实现细节。对于开发者来说,熟悉相关的调试工具如JVisualVM、JConsole等,能够监控缓存的使用情况,优化缓存配置。 **总结** Hibernate的一级缓存和二...
Hibernate的缓存机制分为两层:第一级缓存(Session缓存)和第二级缓存(SessionFactory缓存)。这两种缓存分别服务于不同的应用场景和目的。 ##### 1. 第一级缓存(Session缓存) - **定义**:第一级缓存是在`...
一级缓存,也称为session缓存,是每个Hibernate Session内部管理的一个内存结构。在本篇文章中,我们将深入探讨一级缓存的工作原理、作用以及如何有效地利用它。 ### 一级缓存的工作机制 1. **对象持久化过程**:...
《深入理解Hibernate二级缓存机制》 在Java的持久化框架Hibernate中,缓存机制扮演着重要的角色,尤其是在处理大量数据时,它可以显著提高应用程序的性能。然而,许多人对Hibernate的二级缓存可能存在误解,因此...
一级缓存位于 Session 对象中,是每个 Session 的私有缓存,它存储了从数据库中读取的对象实例。 一级缓存的工作原理: 1. 当我们通过 Hibernate 的 Session 加载或保存一个实体时,这个实体会被放入一级缓存中。 2...