`
san586
  • 浏览: 134746 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

查询缓存

阅读更多
查询缓存是针对普通属性结果集的缓存,对实体对象的结果集只缓存id ;

查询缓存只对query.list()起作用,query.iterate不起作用,也就是query.iterate不使用查询缓存 ;

查询缓存的生命周期:和session无关,当前关联的表发生修改,那么查询缓存生命周期结束 ;

查询缓存的配置和使用:
在SessionFactory中的配置,以下配置均来自ss3ex。
启用查询缓存
<prop key="hibernate.cache.use_query_cache">true</prop>
在程序中必须手动启用查询缓存,如:
query.setCacheable(true);//激活查询缓存
query.setCacheRegion("myCacheRegion");//指定要使用的cacheRegion,可选 
  cacheRegion是可选的,可以对使用的缓存进行特殊设置, 在ehcahe.xml里要补上下面的一段。
<cache name="myCacheRegion" maxElementsInMemory="10" eternal="false" timeToIdleSeconds="3600" timeToLiveSeconds="7200" overflowToDisk="true" />


查询缓存和二级缓存的实验结果

查询缓存二级缓存sessionHQL方法结果
开启查询缓存关闭二级缓存开启一个sessionselect s.name from Student s 分别调用query.list没有发出查询sql,因为启用了查询缓存
开启查询缓存关闭二级缓存开启两个sessionselect s.name from Student s 分别调用query.list不会发出查询sql,因为查询缓存的生命周期和session无关
开启查询缓存关闭二级缓存开启两个sessionselect s.name from Student s 分别调用query.iterate查询缓存只对query.list()起作用,query.iterate不起作用,也就是query.iterate不使用
关闭查询缓存关闭二级缓存开启两个sessionselect s from Student s分别调用query.list查询实体对象会发出查询sql,因为list默认每次都会发出查询sql  
开启查询缓存关闭二级缓存开启两个sessionselect s from Student s分别调用query.list查询实体对象会发出n条查询语句,因为开启了查询缓存,关闭了二级缓存,那么查询缓存会缓存实体对象的id,所以hibernate会根据实体对象的id去查询相应的实体,如果缓存中不存在相应的实体那么将发出根据实体id查询的sql语句,否则不会发出sql使用缓存中的数据
开启查询缓存开启二级缓存开启两个sessionselect s from Student s分别调用query.list查询实体对象不会发出查询sql,因为开启了二级缓存和查询缓存,查询缓存缓存了实体对象的id列表,hibernate会根据实体对象的id列表到二级缓存中取得相应的数据


适用的场合
(1)在应用程序运行中经常使用的查询语句
(2)很少对查询语句关联的数据库数据进行CUD(Create, Update, Delete)操作

Hibernate提供了三种和查询相关的缓存区域

1)默认的查询缓存区域:org.hibernate.cache.StandardQueryCache
2)用户自定义的查询缓存区域
3)时间戳缓存区域:org.hibernate.cache.UpdateTimestampCache

   <!-- 设置时间戳缓存的数据过期策略 -->
    <cache name="org.hibernate.cache.UpdateTimestampsCache" 
       maxElementsInMemory="5000"
       eternal="true" 
       overflowToDisk="true"/>

分享到:
评论

相关推荐

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

    本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始。一级缓存是Hibernate默认提供的缓存,它是每个Session级别的,也被称为...

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

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

    PHP查询缓存.doc

    【PHP查询缓存】是指在PHP应用程序中,为了提高数据库查询效率和减轻数据库负载,将SQL查询的结果存储起来,下次相同查询时直接读取缓存数据,而不是重新执行查询。这种方式特别适用于那些频繁且静态的数据,可以...

    spring AOP实现查询缓存

    本代码通过使用spring aop+ehcache的技术,实现了方法级别的查询缓存,主要原理是 方法的完整路径+方法参数值,作为key,放入cache中,下次访问时先判断cache中是否有该key.

    hibernate开启二级缓存和查询缓存

    在 Hibernate 中,二级缓存和查询缓存是提高应用性能的重要机制。下面将详细介绍如何开启并理解这两个缓存机制。 ### 1. 一级缓存与二级缓存 #### 1.1 一级缓存 一级缓存是 Hibernate 内置的 Session 缓存,它是每...

    释放查询潜力:深度配置MySQL查询缓存

    ### 释放查询潜力:深度配置 MySQL 查询缓存 #### MySQL 概览 MySQL 是一个流行的开源关系型数据库管理系统(RDBMS),广泛应用于 Web 应用程序的后端数据存储。它基于结构化查询语言(SQL)进行数据管理,是 LAMP...

    hibernate查询缓存1

    在深入探讨Hibernate查询缓存之前,我们先了解一下Hibernate的基础概念。Hibernate是一个强大的Java持久化框架,它简化了数据库操作,提供了对象关系映射(ORM)功能。在Hibernate中,对象的状态分为瞬时态、持久态...

    Hibernate查询缓存及实现.PPT

    【标题】:“Hibernate查询缓存及实现.PPT” 【描述】:“Hibernate查询缓存及实现.PPT” 在本文中,我们将深入探讨Hibernate框架中的查询缓存机制及其实施步骤,这是一项旨在提高应用程序性能的重要功能。查询...

    MySQL 执行过程与查询缓存1

    MySQL 执行过程与查询缓存是数据库操作中的关键环节,理解这一过程对于优化数据库性能至关重要。MySQL 的执行流程包括以下几个步骤: 1. **客户端发送查询**:当用户通过MySQL客户端发送一条SQL查询时,这个请求会...

    day37 07-Hibernate二级缓存:查询缓存

    今天我们要探讨的是Hibernate的二级缓存,特别是查询缓存这一重要特性。 首先,我们需要理解缓存的概念。缓存是一种存储技术,用于临时存放经常访问的数据,以减少对主存储器(如数据库)的访问,从而提高系统性能...

    论文研究-自适应的数据库查询缓存.pdf

    而查询缓存是语义缓存的一种,在 SQL解析与查询执行之间,通过研究查询缓存的自主管理来提高数据库的查询性能。首先介绍了数据库常用的语义缓存与自主计算,然后对查询缓存进行了形式化定义,并提出了自适应的查询...

    Freyja的查询缓存功能详解

    Freyja是一个专为提升查询效率而设计的开源工具,其核心特性就是强大的查询缓存功能。这篇博客将深入解析Freyja如何通过缓存机制来优化数据库操作,帮助开发者提高应用性能。 首先,我们要理解查询缓存的基本概念。...

    如何对查询缓存进行维护和调优[文].pdf

    查询缓存是MySQL数据库系统中的一个重要特性,用于提高查询性能,通过存储已执行过的SQL查询结果,以便后续相同的查询可以直接从缓存中获取结果,而不是重新执行查询。维护和调优查询缓存对于优化数据库性能至关重要...

    MYSQL查询缓存性能问题分析与优化案例(绝对精华)[参照].pdf

    在MySQL数据库系统中,查询缓存(Query Cache)是一个旨在提高性能的重要特性,它通过存储已执行查询的结果集来避免对相同查询的重复解析、优化和执行过程。然而,如同【标题】和【描述】中提到的情况,不当配置的...

    Redis从入门到精通(四)Redis实战(二)商户查询缓存 测试项目代码

    本教程将基于“Redis从入门到精通(四)Redis实战(二)商户查询缓存”的主题,深入探讨如何利用Redis来实现商户查询的高效缓存策略。我们将通过测试项目代码来理解这一过程。 首先,让我们理解Redis缓存的基本概念。...

Global site tag (gtag.js) - Google Analytics