`
wu_quanyin
  • 浏览: 208260 次
  • 性别: Icon_minigender_1
  • 来自: 福建省
社区版块
存档分类
最新评论

Hibernate---缓存机制二

阅读更多

 

Hibernate缓存原理:

  对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状 态的管理,OR关系的映射等,但随之带来的就是数据访问效率的降低,和性能的下降,而缓存就是弥补这一缺点的重要方法.

     缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问层中间.ORM在查询数据时首先会根据自身的缓存管 理策略,在缓存中查找相关数据,如发现所需的数据,则直接将此数据作为结果加以利用,从而避免了数据库调用性能的开销.而相对内存操作而言,数据库调用是 一个代价高昂的过程.
     一般来讲ORM中的缓存分为以下几类:
         1:事务级缓存:即在当前事务范围内的数据缓存.就Hibernate来讲,事务级缓存是基于Session的生命周期实现的,每个Session内部会 存在一个数据缓存,它随着 Session的创建而存在,随着Session的销毁而灭亡,因此也称为Session Level Cache.
         2:应用级缓存:即在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享(数据库事务或应用事务),事务之间的缓存共享策略 与应用的事务隔离机制密切相关.在Hibernate中,应用级缓存由SessionFactory实现,所有由一个SessionFactory创建的 Session实例共享此缓存,因此也称为SessionFactory Level Cache.
         3:分布式缓存:即在多个应用实例,多个JVM间共享的缓存策略.分布式缓存由多个应用级缓存实例组成,通过某种远程机制(RMI,JMS)实现各个缓存 实例间的数据同步,任何一个实例的数据修改,将导致整个集群间的数据状态同步.

 

 

Hibernate的一,二级缓存策略:

  Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管 理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配 置和更改,并且可以动态加载和卸载,属于多事务级别,要防止事务并发性。

缓存是以map的形式进行存储的(key-id,value-object)

一级缓存(Session):

   事务范围,每个事务(Session)都有单独的第一级缓存.

   一级缓存的管理:当应用程序调用Session的save()、update()、saveOrUpdate()、get()或load(),以及调用查 询接口的 list()、iterate()--(用的是n+1次查询,先查id)或filter()方法时,如果在Session缓存中还不存在相应的对 象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。 Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中所有持久化对象,flush():使缓存与数据库同步。

当查询相应的字段如(name),而不是对象时,不支持缓存。

二级缓存(SessionFactory):

 3.1. Hibernate的二级缓存策略的一般过程如下:

    1:条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL句查询数据库,一次获得所有的数据对象(这个问题要考虑,如果你查询十万条数据时,内存不是被占用)。

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

  3: 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到,再查询 数据库,把结果按照ID放入到缓存。

  4:删除、更新、增加数据的时候,同时更新缓存。

  Hibernate的二级缓存策略,是针对于ID查询的缓存策略,对于条件查询则毫无作用。为此,Hibernate提供了针对条件查询的Query Cache。

  3.2. 什么样的数据适合存放到第二级缓存中? 1.很少被修改的数据 2.不是很重要的数据,允许出现偶尔并发的数据 3.不会被并发访问的数据 4.参考数据,指的是供应用参考的常量数据,它的实例数目有限,它的实例会被许多其他类的实例引用,实例极少或者从来不会被修改。

  3.3. 不适合存放到第二级缓存的数据? 1 经常被修改的数据 2 财务数据,绝对不允许出现并发 3 与其他应用共享的数据。

  3.4. 常用的缓存插件 Hibernater 的二级缓存是一个插件,下面是几种常用的缓存插件:

  EhCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,对Hibernate的查询缓存提供了支持。

  OSCache:可作为进程范围的缓存,存放数据的物理介质可以是内存或硬盘,提供了丰富的缓存数据过期策略,对Hibernate的查询缓存提供了 支持。

  SwarmCache:可作为群集范围内的缓存,但不支持Hibernate的查询缓存。

  JBossCache:可作为群集范围内的缓存,支持事务型并发访问策略,对Hibernate的查询缓存提供了支持。

  3.5. 配置二级缓存的主要步骤:

  1 选择需要使用二级缓存的持久化类,设置它的命名缓存的并发访问策略。这是最值得认真考虑的步骤。

  2 选择合适的缓存插件,然后编辑该插件的配置文件。

分享到:
评论

相关推荐

    hibernate-release-5.2.10

    6. **缓存**:Hibernate内置了二级缓存机制,可以通过配置使用如Ehcache这样的缓存提供者,提高性能。 7. **关联映射**:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多(@...

    hibernate-core 核心jar包

    9. **缓存机制**:Hibernate有两层缓存,第一层是Session级别的缓存,称为一级缓存;第二层是可选的,可以配置为使用第三方缓存服务,如Ehcache,称为二级缓存。缓存可以显著提升数据访问速度。 10. **事件和监听器...

    hibernate-core-5.0.11.Final.jar

    本文将重点探讨`hibernate-core-5.0.11.Final.jar`的核心源码,帮助读者深入理解其内部机制,并提供实用的应用指导。 一、Hibernate Core概述 Hibernate Core是Hibernate框架的基础部分,它包含了ORM的核心功能,...

    hibernate-jpa-2.1-api-1.0.0.final.jar.zip

    - **缓存**: Hibernate的二级缓存可以显著提升性能,通过配置可以缓存查询结果和实体实例。 - **批处理**: 使用批处理更新和插入,可以减少数据库交互次数,提高效率。 - **连接池**: 配置合适的连接池,如...

    项目中使用 hibernate-memcached 做二级缓存

    总的来说,结合Hibernate的二级缓存机制和Memcached的分布式缓存能力,可以在项目中实现高效的数据缓存,提升系统的响应速度。同时,了解并掌握Memcached的基本原理和配置方法,对于提升系统架构的优化能力大有裨益...

    hibernate-memcached-1.1.0-sources.zip

    传统的数据库缓存机制往往无法满足这样的需求,这时,分布式内存缓存系统如Memcached就显得尤为重要。本文将深入探讨如何将Hibernate与Memcached整合,以提高数据访问效率,并基于`hibernate-memcached-1.1.0-...

    hibernate-release-5.0.0.Final(1).zip

    - 利用缓存机制提高数据访问速度,如一级缓存(Session级)和二级缓存(SessionFactory级)。 五、最佳实践 1. 合理设计实体类:遵循单一职责原则,避免实体类过于庞大,提高代码可维护性。 2. 选择合适的映射策略...

    Hibernate-annotations-3.4最新版本

    在实际应用中,Hibernate-annotations-3.4.0.GA还包含了事务管理、缓存机制等功能。@Transactional注解可以标记一个方法为事务边界,而Hibernate的二级缓存通过@Cacheable和@Cache配置,可以提高查询性能,降低...

    hibernate-release-5.0.7.Final.zip

    这个版本支持Java 8,提供新的API设计,增强了对JPA 2.1规范的支持,并对缓存机制进行了优化。 2. Hibernate核心概念 - Session:它是与数据库交互的主要接口,负责持久化对象的创建、更新和删除。 - Transaction...

    hibernate-release-4.2.4.Final.zip

    10. **缓存机制**:Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的)以提高性能,减少对数据库的直接访问。此外,还可以集成第三方缓存服务如EHCache。 总之,Hibernate 4.2.4....

    hibernate-validator-5.2.4.Final.jar

    Hibernate Validator 5.2.4.Final 版本在性能上也有优化,例如缓存机制的改进,减少了重复的验证操作,提高了整体应用的运行效率。 六、API 及示例 例如,使用 @NotNull 注解来确保一个属性不为空: ```java ...

    hibernate-release-4.3.0.Beta2 lib

    - `ehcache.jar`: EhCache 是 Hibernate 默认的二级缓存提供商,提高数据访问效率。 4. **使用方法** 配置 Hibernate,首先需要在配置文件(通常是 `hibernate.cfg.xml`)中指定数据库连接信息,然后创建 ...

    hibernate-distribution-3.6.2 API及jar包

    此外,还可以利用Hibernate的二级缓存机制,如Ehcache,来优化性能。 总的来说,这个资源包为Java开发者提供了一套完整的Hibernate 3.6.2学习和开发工具,无论你是初学者还是经验丰富的开发者,都能从中受益。通过...

    hibernate-orm-master.zip

    3. **缓存策略**:Hibernate提供了第一级缓存(Session级别的)和第二级缓存(SessionFactory级别的)。第一级缓存默认开启,提高性能;第二级缓存可选,可以跨会话共享,但需要额外配置。 4. **查询语言**:...

    hibernate-extensions-2.1.3.zip ,middlegen for hibernate

    - Cache管理:提供更细粒度的缓存控制,包括第二级缓存和查询缓存的优化。 - Batch处理:支持批量插入、更新和删除操作,提高大数据量操作的性能。 - Event监听器:允许在特定的持久化操作前后执行自定义逻辑,如...

    hibernate-distribution-3.3.2.GA-dist

    2. **会话接口**:Session是Hibernate的主要工作接口,用于执行CRUD(创建、读取、更新和删除)操作,同时提供事务管理和缓存管理功能。 3. **查询语言HQL**:Hibernate Query Language(HQL)是一种面向对象的查询...

    hibernate-distribution-3.6.0

    5. **第二级缓存**:在3.6.0版本中,Hibernate支持了二级缓存,这可以极大地提高数据读取速度。它可以缓存整个实体或特定查询的结果,减轻数据库的压力。 6. **事件监听机制**:Hibernate提供了丰富的事件监听接口...

    hibernate-3.3.2.GA-jar包集合

    10. **缓存机制**: - Hibernate提供了第一级缓存(Session级别)和第二级缓存(SessionFactory级别),以提高性能。还可以集成第三方缓存如 Ehcache。 11. **关联映射**: - Hibernate支持一对一、一对多、多对...

    hibernate-core包

    Hibernate的第二级缓存可以通过插件实现,如Ehcache,它可以在多个`Session`之间共享数据,提高应用性能。`hibernate-core`本身并不包含缓存实现,但提供了缓存的接口和配置支持。 9. **事件和监听器** Hibernate...

Global site tag (gtag.js) - Google Analytics