`
esffor
  • 浏览: 1370841 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate缓存讨论与研究(5)

阅读更多

查询缓存:我们前面提到查询缓存(Query Cache)依赖二级缓存,这到底是怎么回事呢?我看看二级缓存策略的一般过程:
(1) Hibernate进行条件查询的时候,总是发出一条select * from XXX where …(XXX为 表名,类似的语句下文统称Select SQL)这样的SQL语句查询数据库,一次获得所有的符合条件的数据对象。

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

(3) 当Hibernate根据ID访问数据对象的时候,首先从内部缓存中查找,如果在内部缓存中查不到就配置二级缓存,从二级缓存中查;如果还查不到,再查询数据库,把结果按照ID放入到缓存。

(4)添加数据、删除、更新操作时,同时更新二级缓存。这就是Hibernate做批处理的时候效率不高的原因,原来是要维护二级缓存消耗大量时间的缘故。

我们看到这个过程后,可以明显的发现什么?那就是Hibernate的二级缓存策略是针对ID查询的策略,和对象ID密切相关,那么对于条件查询就怎么适用了。对于这种情况的存在,Hibernate引入了“查询缓存”在一定程度上缓解这个问题。

那么我们先来看看我们为什么使用查询缓存?首先我们来思考一个问题,假如我们对数据表Student进行查询操作,查找age>20的所有学生信息,然后纳入二级缓存;第二次我们的查询条件变了,查找age>15的所有学生信息,显然第一次查询的结果完全满足第二次查询的条件,但并不是满足条件的全部数据。这样的话,我们就要再做一次查询得到全部数据才行。再想想,如果我们执行的是相同的条件语句,那么是不是可以利用之前的结果集呢?

Hibernate就是为了解决这个问题的而引入Query Cache的。
查询缓存策略的一般过程如下:
(1)Query Cache保存了之前查询的执行过的Select SQL,以及结果集等信息,组成一个Query Key。(2)当再次遇到查询请求的时候,就会根据Query Key 从Query Cache找,找到就返回。但 是两次查询之间,数据表发生数据变动的话,Hibernate就会自动清除Query Cache中对应的Query Key。

我们从查询缓存的策略中可以看出,Query Cache只是在特定的条件下才会发挥作用,而且要求相当严格:
(1)完全相同的Select SQL重复执行。
(2)重复执行期间,Query Key对应的数据表不能有数据变动(比如添、删、改操作)
为了启用Query Cache,我们需要在hibernate.cfg.xml中进行配置,参考配置如下(只列出核心配置项):
<hibernate-configuration>
  <session-factory>
      <property name="”&lt;br">                         hibernate.cache.user_query_cache>true </session-factory>
</hibernate-configuration>


应用程序中必须在查询执行之前,将Query.Cacheable设置为true,而且每次都应该这样。比如: ……… Query query=session.createQuery(hql).setInteger(0.15); query.setCacheable(true); ………
4:编后语
关于Hibernate缓存的讨论就告一段落了,在实际开发中,运用好缓存可以让你的系统性能得到良好的提升。可缓存也有它的局限性,什么情况用什么情况不用,都要结合实际情况来考量。如果违背了相关的缓存机制,可能会得到负面效果,所以充分考虑实际情况来灵活运用缓存并发挥它的优势,这是我们需要做得更多的。

本文转自
http://www.qqread.com/java/2007/11/u380944_5.html

分享到:
评论

相关推荐

    hibernate技术研究对比总结

    讨论了缓存机制(一级缓存和二级缓存)、批处理、延迟加载和实体状态管理等性能优化策略。 ### 8. 对比其他ORM框架 对比 Hibernate 与其他 ORM 框架,如 MyBatis、EclipseLink 和 JDO,在易用性、灵活性、性能和...

    hibernate源码

    文件`hibernate_fetch_1`与`hibernate_query_cache`涉及到的是Hibernate的数据检索和查询缓存。Hibernate提供了多种加载策略,包括立即加载(Eager Fetching)和延迟加载(Lazy Loading)。立即加载会一次性获取...

    Hibernate 事务和并发控制

    在Java的持久化框架中,Hibernate是一个非常重要的角色,它提供了强大的对象关系映射(ORM)功能,使得开发者能够方便地在Java应用中操作...深入研究Hibernate的文档和实践案例,将有助于进一步提高我们的开发技能。

    Hibernate Reference

    ### Hibernate 3.2.2 参考文档精要解析 #### 引言与初次接触Hibernate Hibernate作为一款流行的Java...通过深入研究这份文档,开发者可以更加熟练地掌握Hibernate的使用技巧,从而在项目中发挥出更高的效率和质量。

    spring-orm-hibernate4源码

    本文将围绕Spring如何管理和驱动Hibernate4进行详细的讨论。 首先,Spring作为一个灵活的IoC(Inversion of Control)容器,它不仅管理着应用对象的生命周期,还负责整合各种ORM框架,包括Hibernate。Spring的ORM...

    Lucene Hibernate

    标题“Lucene Hibernate”揭示了我们讨论的核心主题:如何将Apache Lucene这个强大的全文搜索引擎与Hibernate这款流行的Java对象关系映射(ORM)框架相结合。在这个例子中,我们将深入探讨这两个技术的集成,以及...

    hibernate-3.2源码包

    下面将详细讨论 Hibernate 3.2 源码中的关键知识点: 1. **对象关系映射(ORM)**:Hibernate 提供了一种机制,将Java类映射到数据库表,使得开发者可以使用面向对象的方式来操作数据库,而无需编写大量SQL语句。 ...

    Hibernate实战(第2版).pdf

    5. **集合映射**:讨论如何处理一对多、多对一、多对多等复杂关系,如List、Set、Map等集合类型的映射。 6. **缓存机制**:分析Hibernate的缓存策略,包括一级缓存和二级缓存,以及如何利用缓存提高性能。 7. **...

    论坛系统 hibernate jsp hibernate 毕业论文项目

    【描述】:这个项目是一个基于Java技术栈的论坛系统实现,主要利用了Hibernate ORM框架与JSP(JavaServer Pages)进行开发,是适合学生作为毕业论文项目的实例。它展示了如何将数据库操作与Web界面相结合,为用户...

    Hibernate实战(第2版) 高清扫描版

    8. **第二级缓存和查询缓存**:讨论Hibernate的缓存机制,如何使用第二级缓存提高性能,以及查询缓存如何减少数据库查询次数。 9. **性能优化**:提供一系列优化策略,如延迟加载、批处理、连接池配置等,帮助...

    hibernate 电子书全集

    5. **JPA集成**:如果适用,可能会讨论Hibernate作为Java Persistence API(JPA)实现的使用。 6. **性能调优**:针对大数据量和高并发场景的性能优化技巧。 7. **最新版本特性**:涵盖Hibernate的最新更新和改进。 ...

    hibernate4全注解例子

    8. **性能优化**:学习如何通过缓存机制(一级缓存和二级缓存)、批处理和延迟加载等技术提升Hibernate的性能。 **标签:“源码”和“工具”** 这表明文章可能包含了示例代码,并且可能会讨论如何将这些知识应用于...

    深入浅出Hibernate.pdf

    5. CRUD操作:详细讲解如何使用Hibernate进行创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作,包括Query和Criteria API的使用,以及HQL(Hibernate Query Language)的语法。 6. 查询机制:...

    基于Hibernate的效率查询的研究和应用.pdf

    ### 基于Hibernate的效率查询的研究和应用 #### 摘要 本文详细探讨了当前流行的Hibernate映射框架,并结合某通信企业的电子运行维护系统(E2OMS)的实际开发过程,提出了一个基于Hibernate的数据持久层解决方案。该...

    Java Persistence with Hibernate

    6. **缓存机制**:介绍Hibernate的一级缓存和二级缓存,以及如何配置和优化缓存以提高应用程序性能。 7. **性能优化**:讨论最佳实践,如延迟加载、批处理更新、连接池的使用,以及如何通过分析和调整来优化数据库...

    hibernate入门框架源码

    描述中提到,这个实例使用了MySQL数据库,这意味着我们将讨论如何配置Hibernate以与MySQL配合工作,并执行CRUD(创建、读取、更新和删除)操作。同时,源代码有详细的注释,这意味着初学者可以通过阅读代码和注释来...

    一个好的hibernate源代码有server2008数据库

    我们可以深入讨论Hibernate的相关概念、功能、优点以及如何与SQL Server 2008集成。 **文件名分析:** 文件名为“SSHDemo.rar”和“新建文件夹.rar”。"SSHDemo"可能是一个SSH(Spring、Struts、Hibernate)架构的...

    Pro Hibernate 3 2005

    7. **缓存机制**:解释了Hibernate缓存的实现原理及配置方法,帮助提高应用程序性能。 8. **性能调优**:提供了关于如何优化Hibernate应用性能的一系列建议,包括查询优化、连接池配置等。 9. **集成测试**:介绍了...

    Hibernate开发指南

    5. **关联映射**:深入研究一对一、一对多、多对一和多对多的关系映射,包括联合主键、级联操作、懒加载和立即加载策略。 6. **集合映射**:理解List、Set、Map等集合类型的映射方式,以及如何处理集合的级联操作。...

    达内hibernate自创API

    达内教育作为国内知名的IT培训机构,也对此进行了深入的研究,并分享了其自创的Hibernate API设计与实现。本文将围绕“达内Hibernate自创API”这一主题,详细阐述其核心思想和关键特性。 一、理解Hibernate基础 在...

Global site tag (gtag.js) - Google Analytics