`

Hibernate缓存机制(三)

阅读更多
1、Hibernate缓存概述 

        缓存是介于物理数据源与应用程序之间,是数据库数据在内存中的存放临时copy的容器,

        其作用是为了减少应用程序对物理数据源访问的次数,从而提高了应用的运行性能。 

        Hibernate在进行读取数据的时候,根据缓存机制在相应的缓存中查询,

        如果在缓存中找到了需要的数据(我们把这称做“缓存命中"),则就直接把命中的数据作为结果加以利用,

        避免了建立数据库查询的性能损耗。

2:Hibernate缓存分类 

        一级缓存(session):内部缓存

                事务范围:缓存只能被当前事务访问。缓存的生命周期依赖于事务的生命周期,

                当事务结束时,缓存也就结束生命周期。

        二级缓存(sessionFactory):缓存被应用范围内的所有事务共享。

                这些事务有可能是并发访问缓存,因此必须对缓存进行更新。

                缓存的生命周期依赖于应用的生命周期,应用结束时,

                缓存也就结束了生命周期,二级缓存存在于应用范围。 

        集群范围:在集群环境中,缓存被一个机器或者多个机器的进程共享。

                缓存中的数据被复制到集群环境中的每个进程节点,

                进程间通过远程通信来保证缓存中的数据的一致性,

                缓存中的数据通常采用对象的松散数据形式,二级缓存也存在与应用范围。

                注意:对大多数应用来说,应该慎重地考虑是否需要使用集群范围的缓存,

                再加上集群范围还有数据同步的问题,所以应当慎用。 

        多种范围的缓存处理过程

                持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据,

                还可以到应用范围或集群范围的缓存内查询,如果还是没有查到,那么只有到数据库中查询了。 

        缓存应用的范围:

                修改少,数量在可以接受的范围内

5、使用二级缓存的原则:

        数据不会被第三方修改 

        同一数据系统经常引用 

        数据大小在可接受范围之内 

        关键数据或不会被并发更新的数据

5、hibernate引入第三方的缓存组件EHCACHE,下面是具体的实现步骤:

        修改hibernate.cfg.xml配置引入ehCache缓存

                <hibernate-configuration>

                        <session-factory>

                                <property name="hibernate.cache.provider_class">

                                        net.sf.ehcache.hibernate.EhCacheProvider

                                </property>

                                <!--query也支持缓存-->

                                <property name="hibernate.cache.use_query_cache">true</property>

                        </session-factory>

                </hibernate-configuration>

        在src根目录下加入ehcache.xml文件,具体内容如下:

                <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">

                <defaultCache

                            maxElementsInMemory="10000"

                            eternal="false"

                            timeToIdleSeconds="120"

                            timeToLiveSeconds="120"

                            overflowToDisk="true"

                            />

                </ehcache>

        在映射文件中指定缓存同步策略

                <class name="com.tenly.bean.Student">

                        <cache usage="read-write">

                        <set name="classroom">

                                <cache usage="read-only">

                        </set>

                </class>

        usage属性说明:

            read-only:只读。对于不会发生改变的数据,可使用只读型缓存。 

            nonstrict-read-write:不严格可读写缓存。如果应用程序对并发访问下的数据同步要求不是很严格的话,

            而且数据更新操作频率较低。采用本项,可获得良好的性能。 

            read-write 

            对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题. 

            transactional(事物型) 

            在Hibernate中,事务型缓存必须运行在JTA事务环境中。

        在测试query时,说明其将用二级缓存

                query.setCacheable(true);

 

3、释放缓存:

        一级缓存的释放

                Session.evict(XXX) 

                        将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形,                        

                        需要及时释放对象占用的内存维持系统的稳定性

                        是不希望当前Session继续运用此对象的状态变化来同步更新数据库。 

                Session.clear()清除所有的一级缓存

        二级缓存的释放

                SessionFacatoyr.evict(XXX) 

                        将某个特定的对象从内部缓存中清除,上述的XXX 为对象的实例名。使用此方法有两种适用情形,                        

                        需要及时释放对象占用的内存维持系统的稳定性

                        是不希望当前Session继续运用此对象的状态变化来同步更新数据库。 

                SessionFactory.clear()清除所有的二级缓存

6、查询缓存:

        二级缓存策略的一般过程: 

            Hibernate进行条件查询的时候,总是发出一条select * from XXX where …(XXX为 表名,

             类似的语句下文统称Select SQL)这样的SQL语句查询数据库,一次获得所有的符合条件的数据对象。 

                把获得的所有数据对象根据ID放入到第二级缓存中。 

                当Hibernate根据ID访问数据对象的时候,首先从内部缓存中查找,如果在内部缓存中查不到就配置二级缓存,

                从二级缓存中查;如果还查不到,再查询数据库,把结果按照ID放入到缓存。 

             添加数据、删除、更新操作时,同时更新二级缓存。这就是Hibernate做批处理的时候效率不高的原因,

                     原来是要维护二级缓存消耗大量时间的缘故。 

    条件查询的处理过程:

               第一次查找age>20的所有学生信息,然后纳入二级缓存。

               第二次我们的查询条件变了,查找age>15的所有学生信息,显然第一次查询的结果完全满足第二次查询的条件,

               但并不是满足条件的全部数据。这样的话,我们就要再做一次查询得到全部数据才行。

               如果我们执行的是相同的条件语句,Hibernate引入Query Cache的。 

             查询缓存策略的一般过程: 

                        完全相同的Select SQL重复执行。 

                        重复执行期间,Query Key对应的数据表不能有数据变动(比如添、删、改操作) 

                        启用Query Cache,我们需要在hibernate.cfg.xml中进行配置,参考配置如下(只列出核心配置项): 

                                <hibernate-configuration>

                                        <session-factory>

                                                <property name="hibernate.cache.user_query_cache">true</property>

                                        </session-factory>

                                </hibernate-configuration>

                        在查询执行之前,将Query.Cacheable设置为true,而且每次都应该这样。比如:

                                Query query=session.createQuery(hql).setInteger(0.15);

                                query.setCacheable(true);



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pansu/archive/2009/01/06/3720761.aspx

 

分享到:
评论

相关推荐

    hibernate缓存机制

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

    HIBERNATE的缓存机制

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

    Hibernate缓存机制.txt

    Hibernate缓存机制.txt

    Hibernate缓存机制,转载

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

    深入理解Hibernate缓存

    ### 深入理解Hibernate缓存 #### 一、Hibernate缓存概述 Hibernate作为一款流行的Java持久层框架,为开发者提供了高效且灵活的数据访问能力。其中,缓存机制是Hibernate性能优化的重要组成部分之一。理解Hibernate...

    Hibernate缓存机制

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

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

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

    Hibernate缓存机制探讨

    在配置Hibernate缓存时,需要明确哪些实体或查询结果应该缓存,并设置相应的缓存策略。例如,我们可以使用`@Cacheable`注解标记实体类,使用`@Cache`注解来定义缓存区域和策略。同时,对于查询结果的缓存,可以使用`...

    Hibernate缓存机制解说

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

    Hibernate缓存机制探讨.doc

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

    Hibernate缓存深入详解 from ITEye

    **Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,...

    Hibernate缓存机制深入浅出

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

    Hibernate缓存技术研究

    ### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...

    Hibernate的缓存机制

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

    hibernate的缓存机制

    **标题:“Hibernate的缓存机制”** 在Java的持久化框架Hibernate中,缓存机制扮演着至关重要的角色,它能够显著提升数据访问的性能。缓存可以分为一级缓存和二级缓存,以及查询缓存。 **一级缓存**: 一级缓存是...

Global site tag (gtag.js) - Google Analytics