`

hibernate3 缓存

阅读更多

http://www.cnblogs.com/ksyou/archive/2009/04/02/1428045.html

1.一级缓存:  session (似乎共用的一个session,但好象又不是)

2.二级缓存:  ehcache1.6

                二级缓存是缓存实体对象的

  开启二级缓存,修改hibernate.cfg.xml文件
  <property name="hibernate.cache.use_second_level_cache">true</property>

 

<property name="hibernate.cache.provider_class">
   org.hibernate.cache.EhCacheProvider
  </property>

 

<hibernate-mapping>
    <class name="com.model.User" table="user" catalog="zhangwei" dynamic-update="true">
    <meta attribute="implement-equals">true</meta>
      <cache usage="read-only"/>
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="identity" />
        </id>
        ...

 

或者:         <class-cache class="com.bjsxt.hibernate.Student" usage="read-only" include="all" /> 

-----------------------


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

 

 

<property name="hibernate.cache.use_second_level_cache">false</property>  设置这个每次都会从数据库查询。

      

多个session共用二级缓存:

       1.如果一个session用load()方法加载一个对象,只有配置了二级缓存,其它的session用load()方法加载时,不从数据库查询,而从二级缓存中查询.(get()方法也是先从二级缓存查询)

       2.管理二级缓存:    HibernateSessionFactory.getSessionFactory().evict(User.class,1);

       3.没有设置use_query_cache=true,list()方法每次都会从数据库查询,只加入hibernate.cache.provider_class

还有<cache usage="read-only"/>,list()方法还是输出了sql语句.
       4.只向二级缓存写数据,而不从二级缓存读数据 
              session.setCacheMode(CacheMode.PUT);

       5.仅向二级缓存读数据,而不向二级缓存写数据
              session.setCacheMode(CacheMode.GET);

       6.配置二级缓存,没有配置查询缓存use_query_cache=true,发现iterator()方法先从二级缓存取对象,如果二级缓存没有需要的对象,就从数据库查询.

       7.list()方法,不管有没有配二级缓存,都会从数据库查询.

       8.如果查询需要强行刷新其查询缓存区域,那么你应该调用Query.setCacheMode(CacheMode.REFRESH)方法

       9.使用查询缓存,需要在Query的后面加.setCacheable(true),当参数相同,赋值也相同时才能从二级缓存中查询.所有的Query查询都适用.(list()也加下.setCacheable(true))也能从二级缓存中查询.

19.4. 查询缓存(The Query Cache)

查询的结果集也可以被缓存。只有当经常使用同样的参数进行查询时,这才会有些用处。 要使用查询缓存,首先你必须打开它:

hibernate.cache.use_query_cache true

该设置将会创建两个缓存区域 - 一个用于保存查询结果集(org.hibernate.cache.StandardQueryCache); 另一个则用于保存最近查询的一系列表的时间戳(org.hibernate.cache.UpdateTimestampsCache)。 请注意:在查询缓存中,它并不缓存结果集中所包含的实体的确切状态;它只缓存这些实体的标识符属性的值、以及各值类型的结果。 所以查询缓存通常会和二级缓存一起使用。

绝大多数的查询并不能从查询缓存中受益,所以Hibernate默认是不进行查询缓存的。如若需要进行缓存,请调用 Query.setCacheable(true)方法。这个调用会让查询在执行过程中时先从缓存中查找结果, 并将自己的结果集放到缓存中去。

如果你要对查询缓存的失效政策进行精确的控制,你必须调用Query.setCacheRegion()方法, 为每个查询指定其命名的缓存区域。

List blogs = sess.createQuery("from Blog blog where blog.blogger = :blogger")
    .setEntity("blogger", blogger)
    .setMaxResults(15)
    .setCacheable(true)
    .setCacheRegion("frontpages")
    .list();

如果查询需要强行刷新其查询缓存区域,那么你应该调用Query.setCacheMode(CacheMode.REFRESH)方法。 这对在其他进程中修改底层数据(例如,不通过Hibernate修改数据),或对那些需要选择性更新特定查询结果集的情况特别有用。 这是对SessionFactory.evictQueries()的更为有效的替代方案,同样可以清除查询缓存区域

分享到:
评论

相关推荐

    HIBERNATE的缓存机制

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

    深入理解Hibernate缓存

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

    Hibernate的缓存策略

    ### Hibernate的缓存策略 #### 一、缓存的基本概念 缓存技术是现代软件架构设计中的重要组成部分,尤其在数据库交互频繁的应用场景下尤为重要。简单来说,缓存是一种存储技术,位于应用程序与物理数据之间,目的是...

    管理Hibernate的缓存

    管理Hibernate的缓存缓存 管理Hibernate的缓存缓存

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

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

    Hibernate缓存深入详解

    【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...

    Hibernate缓存技术研究

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

    Hibernate缓存.doc

    Hibernate缓存.docHibernate缓存.doc

    Hibernate缓存深入详解 from ITEye

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

    Hibernate缓存,性能优化

    本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### Hibernate缓存原理 Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动...

    hibernate一级缓存和二级缓存的区别与联系

    Hibernate 是一个流行的对象关系映射(ORM)框架,它提供了数据缓存机制以优化数据库访问性能。缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存...

    Hibernate二级缓存

    3. **实体缓存配置**:接下来,在对应实体的映射文件(如`Customer.hbm.xml`)中,启用二级缓存支持。例如: ```xml ... ``` 这里的`usage`属性可以设置为`read-only`、`nonstrict-read-write`、`read-...

    hibernate缓存机制

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

    hibernate缓存ehcache用法

    这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...

    hibernate一级缓存、二级缓存和查询缓存

    **hibernate一级缓存、二级缓存和查询缓存** 在Java的持久化框架Hibernate中,缓存机制是提高应用程序性能的关键要素。缓存能够减少数据库的访问次数,提高数据读取速度,并且在一定程度上降低了系统的负载。本文将...

    Hibernate缓存策略

    Hibernate缓存原理及调优策略 Hibernate缓存原理调优策略

    hibernate的缓存机制

    3. 合理设定缓存大小,避免缓存溢出导致系统性能下降。 4. 使用缓存时,应确保有足够的内存资源,防止因缓存过大导致系统内存不足。 总结来说,Hibernate的缓存机制是提升应用性能的重要手段,但正确使用和管理缓存...

Global site tag (gtag.js) - Google Analytics