`
小张三
  • 浏览: 67897 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Hibernate缓存机制(转载)

    博客分类:
  • J2EE
阅读更多

     缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。

 

    缓存的介质一般是内存,所以读写数据很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。

 

    Hibernate的换成包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据。SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定SQL数据,因此SessionFactory不需要进行内置缓存与映射文件的同步。SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件。外置缓存的数据是数据库数据的拷贝,外置缓存的介质可以是内存或者硬盘。SessionFactory的外置缓存也被称为Hibernate的第二级缓存。

 

    Hibernate的这两级缓存都位于持久层,存放的都是数据库数据的拷贝,那么它们之间的区别是什么呢?为了理解二者的区别,需要深入理解持久层的缓冲的两大特性:缓存的范围和缓存的并发访问策略

 

    持久化层的缓存的范围

 

    缓存的范围决定了缓存的生命周期以及可以被谁访问。缓存的范围分为三类。

 

    1.事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,当事务介绍时,缓存也就结束生命周期。在此范围下,缓存的介质是内存。事务可以是数据库事务或者应用事务,每个事务都有独立的缓存,缓存内的数据通常采用相互关联的对象形式。

    2.进程范围:缓存被进程内的所用事务共享。这些事务有可能是并发访问策略,因此必须对缓存采用必要的事务隔离机制。缓存的生命周期依赖于进程的生命周期,进程结束时,缓存也就结束了生命周期。进程范围的缓存可能会存放大量的数据,所以存放的介质可以是内存或硬盘。缓存内的数据既可以是相互关联的对象形式也可以是对象的松散数据形式。松散的对象数据形式有点类似于对象的序列化数据,但是对象分解为松散的算法比对象序列化的算法要求更快。

     3.集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。缓存中的数据被复制到集群环境中的每个进程节点,进程间通过远程通信来保证缓存中的数据的一致性,缓存中的数据通常采用对象的松散数据形式。

 

     对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存,因为访问的速度不一定会比直接访问数据库数据的速度快多少。

 

     持久层可以提供多种范围的缓冲。如果在事务范围的缓存中没有查到相应的数据,还可以到进程范围或集群范围的缓存内查询,如果还是没有查到,那么只有到数据库中查询。事务范围的缓冲是持久层的第一集缓存,通常它是必需的;进程范围或集群范围的换成是持久层的第二级缓存,通常是可选的。

 

      持久层的缓存的并发访问策略

 

      当多个并发的事务同时访问持久层的缓存的相同数据时,会引起并发问题,必须采用必要的事务隔离措施。

 

      在进程范围或集群范围的缓存,即第二级缓存,会出现并发问题。因此可以设定以下四种类型的并发访问策略,每一张策略对应一种事物隔离级别。

      事务型:仅仅在受管理环境中适用。它提供了Repeatable Read事务隔离界别。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止在脏读和不可重复读这类的并发问题。

      读写型:提供了Read Committed 事务隔离级别。仅仅在非集群的环境中适用。对于经常被读但很少修改的数据。可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。

      非严格读写型:不保证缓存与数据库中数据的一致性。如果存在两个事务同时访问缓存中相同数据的可能,必须为该数据配置一个很短的数据过期时间,从而尽量避免脏读。对于极少被修改,并且允许偶尔脏读的数据,可以采用这种并发访问策略。

      只读型:对于从不会修改的数据,如参考数据,可以使用这种并发访问策略。

 

      事务型并发访问策略是事务隔离级别最高,只读型的隔离级别最低。事务隔离级别越高,并发性能就越低。

 

 

1
0
分享到:
评论

相关推荐

    hibernate缓存机制

    Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...

    Hibernate缓存机制,转载

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

    Hibernate缓存机制.txt

    Hibernate缓存机制.txt

    HIBERNATE的缓存机制

    Hibernate缓存机制是提高应用程序性能的关键特性,尤其是在频繁与数据库交互的应用中。缓存通过减少对物理数据库的直接访问次数,显著提升了数据读取和写入的速度。这主要是因为从缓存中读取数据比从数据库中获取更...

    Hibernate缓存机制

    h​i​b​e​r​n​a​t​e​缓​存​机​制​,​你​必​须​学​的​持​久​层​技​术​。

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

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

    Hibernate缓存机制探讨

    本文将深入探讨Hibernate的缓存机制,帮助开发者理解如何有效地利用缓存提高应用性能。 首先,我们需要了解缓存的基本概念。缓存是一种存储技术,用于临时存储经常访问的数据,以减少对主存储器(如硬盘或网络)的...

    Hibernate缓存机制解说

    ## Hibernate缓存机制详解 ### 一、缓存分类与管理 Hibernate提供了两种主要的缓存类型:一级缓存和二级缓存。 #### 1. 一级缓存 一级缓存也称为Session缓存,它在同一个Session中对数据的多次读取操作只需要一...

    Hibernate缓存机制探讨.doc

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

    深入理解Hibernate缓存

    其中,缓存机制是Hibernate性能优化的重要组成部分之一。理解Hibernate缓存的工作原理及配置方法对于提高应用性能具有重要意义。 在Hibernate中,缓存分为一级缓存(第一级缓存)和二级缓存(第二级缓存)。一级...

    Hibernate缓存机制深入浅出

    Hibernate缓存介于Hibernate应用和数据库之间,缓存中存放了数据库数据的拷贝。 其作用是减少访问数据库的频率,从而提高应用的运行性能

    Hibernate缓存深入详解 from ITEye

    这时,Hibernate的缓存机制就显得尤为重要。本篇深入详解将带你了解Hibernate缓存的原理、类型以及最佳实践。 **一、Hibernate缓存概述** Hibernate的缓存机制主要是为了减少对数据库的直接访问,提高系统性能。它...

    Hibernate缓存.doc

    Hibernate缓存.docHibernate缓存.doc

    Hibernate缓存技术研究

    Hibernate的缓存机制分为两层:第一级缓存(Session缓存)和第二级缓存(SessionFactory缓存)。这两种缓存分别服务于不同的应用场景和目的。 ##### 1. 第一级缓存(Session缓存) - **定义**:第一级缓存是在`...

    Hibernate的缓存机制

    ### Hibernate的缓存机制 #### 缓存的基本概念 缓存技术在软件开发中扮演着重要的角色,尤其是在提高数据访问效率方面。缓存通常被放置在应用程序与物理数据源(如数据库)之间,目的是减少对物理数据源的访问频率...

    Java Hibernate缓存深入详解

    Java Hibernate缓存深入详解

Global site tag (gtag.js) - Google Analytics