`

Hibernate缓存机制探讨

阅读更多
    缓存是提高硬件和应用程序性能的一个关键因素,在对象映射框架中更是如此。因此,合理使用缓存能够大幅度的提高Hibernate应用程序的性能。
    Hibernate提供了两级缓存架构,第一级缓存是Session的缓存,第二级缓存是一个用户决定是否使用的缓存,能够借助与第三方的组件实现。Hibernate则提供了缓存管理接口,应用程序可以自由的对缓存进行管理。
    缓存是对或计算代价较大的原始数据的复制存储。通过在缓存(连续的内存空间)存储数据,对缓存中的数据进行访问,可以缩短平均访问时间,提高数据的平均传输速度。
    缓存首先出现在CPU中,由于CPU的速度很快,主存储器的存储速度无法与其相比,因而影响了计算机的执行效率。在CPU和主存储器之间加入了速度最快的SRAM作为CPU与相对低速的存储器之间交换数据的缓冲区,这样可以大幅度提高系统的执行效率,可且通过CACHE来事先读取CPU可能需要的数据。推广开来,凡是位于速度相差很大的两种硬件或应用之间的,用于协调两者数据传输差异的结构都可以称为缓存。
    缓存将最近访问过的信息存储在特殊内存系统中以避免CPU在重新到主存储器中存取。在特定的硬件基础和应用架构之上,缓存往往是提升系统性能的关键因素之一。在使用数据库的应用系统中,缓存位于数据库和应用之间,在内存中保存底层数据库的数据副本(应用程序经常方位的数据),以便应用程序之间重内存中存取而不必频繁的方位数据库,因此提高了应用程序访问数据的效率。
    缓存介于应用程序的数据访问层和数据库等数据源层之间,一般位于内存中,而数据库等数据源长来自硬盘或网络。相对于硬盘和网络,应用程序访问内存的速度显然要快的很多。不过如果缓存中数据量太大也可以放置到硬盘上,需要时在掉入内存,这样虽然速度慢些,但还是比直接从网络获取要快!
    对于Hibernate而言,它是一个实现了对象关系映射的组件。应用程序中的数据通过Hibernate中的持久化实例反映。这些持久化实例维护的数据是来自于底层数据库或即将同步更行到数据库的数据,为了获取这些数据,Hibernate必须频繁的访问数据库,产生大量的数据库连接操作和数据传输动作,效率较低。另外,Hibernate屏蔽了底层数据库的操作细节,让用户可以以操作对象的方式访问关系数据库中的数据,在对象关系映射转换的过程中,Hibernate势必付出了一些系统开销!
    为了提升Hibernate的数据库访问效率并应对Hibernate封装底层数据库的内存开销,需要引入缓存策略。缓存作为数据库数据在内存中的临时容器,内涵了数据库数在内存中的临时副本。Hibernate读取所需数据时,首先在缓存中查找(先是一级缓存再次是二级缓存),若果缓存中存在需要的数据则称为命中(和CPU在一级缓存中取到需要的数据概念一样),然后就会直接返回数据,这样的话就避免了数据库调用的开销,不过如果缓存中没有所需要的数据还是会访问底层数据库。
    Hibernate采用二级缓存体系,包括Session缓存(一级缓存)和SessionFactory缓存(二级缓存)。
    (1)Session缓存是内置的,默认的,不能被卸载。Session维护了其自身生命周期中的一些持久化实例和它们的集合。(就像是一个方法中的变量)
    (2)SessionFactory缓存即Hibernate二级缓存,按结构可以分为内置缓存和外置缓存两种。
     针对缓存的生命周期的不同,我们可以将Hibernate的缓存分为三个层次:
     1.事物级缓存
       缓存只能被当前事物访问。这个事物可以是一个数据库事物(比如Session),也可以是某个应用程序大的事物。缓存的声明周期依赖于事物的生命周期,很显然,就像是一个方法中的变量(内部变量)方法执行完后,其内部变量就会小时除非我们在那个方法中将其存入一个全局变量的集合类中。因此,对于Session而言,事物级缓存有Session实现。Sessions内部维护一个数据缓存这个缓存随着Session的创建而建立,在Session关闭时将被JVM垃圾回收机制回收除非其还存在引用(即使把其放进一个全局变量中例如集合)。Session内部缓存(说白了也就是Session内部变量)只能在Session实例范围中使用。
     2.应用级缓存
     缓存在某个应用范围被所有事务共享(指的是数据库事务Session)。缓存的声明周期依赖于应用程序的生命周期,当这个应用程序的生命周期结束时,缓存生命周球随之结束(我们不妨理解为全局变量)。不过这里就存在一个问题,由于缓存被所有事务共享,缓存可能被这些事务并发访问,这个主要必须依靠对缓存设置必要的事务隔离机制和缓存共享策略来尽力避免。另外,应用级缓存在整个应用范围内使用,数据量较大时可以存储在硬盘上。
     对于Hibernate而言,应用级别缓存有SessionFactory实现。Session实例有SessionFactory创建,并共享SessionFactory的缓存。
     其实我们可以这样理解SessionFactory与Session,以及一级缓存和二级缓存。SessionFactory是一个可执行类的话,二级缓存就相当于其内部的一个集合类作为其全局变量,而Session则可以看做其内部的一个方法(或者是内部方法中的内部类的实例),类的方法肯定是可以访问其类的变量(更何况全局变量),但是类的方法以结束其内部类就会立即消失而类的全局变量则依然存在知道这个类执行完所有方法。因此,如果我们想保存数据库数据副本到二级缓存中,只能在这个类运行内部方法时把带到的数据存到全局变量(比如集合类中)中。
分享到:
评论

相关推荐

    Hibernate缓存机制探讨.doc

    ### Hibernate缓存机制详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它简化了 Java 应用程序与数据库交互的过程。然而,直接使用 JDBC 访问数据库存在一定的性能开销。为了提升性能,Hibernate ...

    Hibernate缓存机制,转载

    **标题:“Hibernate缓存机制,转载”** **描述:**这篇博客主要探讨了Hibernate框架中的缓存机制,包括一级缓存和二级缓存的概念、工作原理以及如何在实际开发中应用。 **标签:“源码 工具”** **知识点详解:*...

    hibernate缓存机制分析共17页.pdf.zip

    《Hibernate缓存机制详解》 Hibernate,作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。其缓存机制是优化性能的关键组成部分,它减少了对数据库的直接访问,提高了数据处理效率。本文...

    Hibernate缓存机制

    【Hibernate缓存机制】 Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,其缓存机制是提高数据访问性能的关键组成部分。缓存能够减少对数据库的直接访问,从而提高应用性能,降低数据库负载。这里我们...

    hibernate缓存

    ### Hibernate缓存机制及优化策略 #### 一、概述 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域被广泛应用于数据库操作。它提供了丰富的缓存机制来提高应用性能并降低数据库访问压力。本文将...

    hibernate的缓存机制和session对象的产生方式案例

    在Java的持久化框架Hibernate中,缓存机制和Session对象的管理是其高效运作的关键要素。本文将深入探讨这两个主题,以帮助开发者更好地理解和利用Hibernate。 首先,让我们聚焦于Hibernate的缓存机制。缓存的存在是...

    Hibernate缓存,性能优化

    综上所述,Hibernate缓存机制是提升应用性能的重要手段,通过合理配置缓存策略、优化查询方式、管理数据库连接以及实施有效的监控和调优措施,可以显著提高Hibernate应用的运行效率和用户体验。然而,缓存的使用并非...

    Hibernate的缓存机制

    本文将深入探讨 Hibernate 的缓存机制,包括其两个级别——一级缓存和二级缓存,并讨论它们的工作原理、范围、并发访问策略以及如何管理和配置。 1. **一级缓存** - **范围与作用**:一级缓存是 Session 级别的...

    Hibernate缓存与spring事务详解

    本篇文章将深入探讨Hibernate的缓存机制和Spring的事务管理,以帮助开发者更好地理解和利用这两个强大的工具。 **一、Hibernate缓存** 1. **第一级缓存:Session缓存** - Hibernate的每个Session都有一个内置的...

    Hibernate缓存

    2. Hibernate缓存机制.doc:这个文档应该详细解释了Hibernate的一级和二级缓存机制,包括缓存的生命周期、更新策略(如脏检查和锁机制)以及缓存失效策略。 3. osCache.doc:可能深入介绍了Oscache的高级特性和最佳...

    Hibernate缓存深入详解

    本文将深入探讨Hibernate的缓存机制,包括一级缓存和二级缓存,以及它们的应用和优化。 **1. Hibernate缓存概述** Hibernate缓存主要位于持久化层,它的作用是减少对数据库的直接访问,提高数据读取速度。缓存中...

    Hibernate教程25_Hibernate缓存

    **标题解析:** "Hibernate教程25_Hibernate缓存" 这个标题表明了我们要讨论的是关于Hibernate框架的第25个教程,重点是它的缓存机制。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的...

    hibernate缓存.txt

    ### Hibernate缓存机制详解 #### 一、概述 在现代软件开发中,为了提高应用程序的性能,缓存技术被广泛采用。Hibernate作为一种流行的Java持久化框架,提供了丰富的缓存机制来减少对数据库的访问频率,从而提升...

    hibernate 缓存

    本篇将深入探讨Hibernate的缓存机制,包括一级缓存和二级缓存,并涉及二级缓存的高级应用——分布式缓存和查询缓存。 ### 1. Hibernate缓存概述 **缓存的作用**:减少对数据库的访问次数,从而提高应用性能。...

    Hibernate一级缓存、二级缓存以及查询缓存实例

    在Java的持久化框架Hibernate中,缓存机制是优化数据库操作性能的重要手段。本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始...

    Hibernate 缓存 实例

    本篇文章将深入探讨Hibernate缓存,并通过实例演示其配置和使用。 1. Ehcache与Hibernate集成 Ehcache是一种广泛使用的开源Java分布式缓存系统,它支持多种缓存策略。在与Hibernate集成时,我们通常通过以下方式...

    hibernate缓存总结

    总结,Hibernate缓存机制是其性能优化的重要手段,通过理解并合理利用一级缓存、二级缓存和查询缓存,能够显著提升应用的运行效率。然而,缓存的使用也需谨慎,以免引发数据一致性问题。开发者应结合实际业务场景,...

Global site tag (gtag.js) - Google Analytics