巧用Hibernate的查询缓存

Hibernate 一级缓存 二级缓存 1+N问题 查询缓存 在本篇随笔里将会分析一下hibernate缓存机制,包括一级缓存(session级别)、二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题。 随笔虽长,但我相信看完的朋友绝对能对hibernate的 N+1问题以及缓存有更深的了解。 一、N+1问题 首先我们来探讨一下N+1的问题,我们先通过一个例子来看一下,什么是N+1问题: li 阅读详情

众所周知Hibernate是一个优秀的持久层框架,特别是他的数据缓存机制吸引了很多开发者。对与二级缓存而言使用不同的数据查询方式,对二级缓存的使用情况是不一样的,如list和iterator方法,list对二级缓存只写不读,而iterator可以很好的利用二级缓存,但是iterator方法有一个很不好的毛病,就是会出现N+1次查询的问题。如何才能既利用二级缓存又不会产生N+1次查询的问题呢,下面给大家介绍一个好方法,那就是巧用Hibernate的查询缓存。

为什么叫巧用呢,因为不当的使用查询缓存,依然会出现N+1次查询的问题。

很遗憾,本人花了很长时间写了很长的文章,谁知道仅仅因为不小心按了backspace(可能当时光标不在编辑区了),导致页面跳转(后退),再企图通过前进按钮重新回到编辑页面的时候,已为时已晚了,退是退回来了,可是刚才写的那么多文字,已经烟消云散了!!!

真想%@#(*#&^

所以干脆长话短说吧,就是在配置查询缓存的时候,设置的查询缓存数目乘以每页显示的数目不大于该缓存对应表的class缓存的数目。可能比较拗口,但是意思已经全包含在里面了,大家有时间慢慢去理解吧。理解不了的话也不要怪我,就怪这个该死的CSDN博客没为我们考虑周到吧!

Java 领域 Hibernate查询缓存清理策略 Hibernate作为Java领域最流行的ORM框架之一,其缓存机制对应用性能有着至关重要的影响。深入理解查询缓存的工作原理掌握查询缓存的配置和使用方法了解查询缓存的失效机制学会优化查询缓存的使用策略本文讨论范围涵盖Hibernate 5.x版本的查询缓存机制,重点分析其清理策略的实现原理和最佳实践。背景介绍:概述Hibernate缓存体系核心概念:详细解析查询缓存机制清理策略算法:分析缓存清理的实现原理数学模型:建立缓存性能分析模型实战案例:展示查询缓存的实际应用。 阅读详情

相关推荐

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

NULL 博文链接:https://cdxs2.iteye.com/blog/1936594

Hibernate查询问题 如何不使用缓存 简单方法

如果 使用HIbernate循环查询某个表的话。他会使用缓存技术,来提高数据库性能。其思路是:第一次执行某个sql语句,记录下他的参数。第二次执行某个sql语句时候首先拿他的参数表和默认记录的参数表相比较,如果参数表一致,那么hibernate不会重新查询数据库,而是从缓存中读取他的值。因此连续执行某个查询语句的话,如果此时数据库中关于这个表的字段有更新,将不会显示。附:当两个sql语句完

vastskyjoe的专栏 1万+

Hibernate查询缓存是什么?

Hibernate查询缓存是什么?

weixin_45428910的博客 376

Hibernate缓存清除

<br />一、Hibernate一级缓存<br />(1)hibernate支持两个级别的缓存,默认只支持一级缓存;<br />(2)每个Session内部自带一个一级缓存;<br />(3)某个Session被关闭时,其对应的一级缓存自动清除;<br />(4)save、update、saveOrupdate、load、get、list、iterate、lock方法都会向缓存中存对象.<br />(5)可以从缓存中读数据的只有: get、load、iterate<br />(6)Query对象默认情况下

ksqqxq的专栏 841

细说Hibernate缓存机制

2.1. 查询缓存:当使用 Session 对象执行查询操作时,如果一级缓存中没有数据,Hibernate 会在二级缓存中查找数据。2.2. 更新缓存:当使用 Session 对象执行更新操作时,Hibernate 会将更新后的数据存入一级缓存,并根据实体类的缓存策略更新二级缓存中的数据。2.3. 保存缓存:当使用 Session 对象执行保存操作时,Hibernate 会将新增的数据存入一级缓存,并根据实体类的缓存策略将数据插入到二级缓存。当 Session 对象被关闭时,一级缓存中的数据将被清除。

孤鹰的博客 2807

hibernate查询缓存机制

<br />原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://yangfei520.blog.51cto.com/1041581/287380    在hibernate的使用中,大家多数时间都在讨论一级缓存和二级缓存,而往往忽略了查询缓存。其实hibernate查询缓存在使用过程中也起着同样重要的作用。hibernate查询缓存是主要是针对普通属性结果集的缓存, 而对于实体对象的结果集只缓存id。在一级缓存,二级缓存查询缓存都打开的

FG2006的专栏 1082

hibernate二级缓存查询缓存

<br />二级缓存查询缓存都相当于一个map。 <br />二级缓存缓存的key为id,value为实体对象。一般load(),iterate()使用到二级缓存list()需要结合查询缓存使用。iterate()和list()区别如下: <br />iterate()不需要开启查询缓存,它首先发出一个sql如”select s.id from Student s”去数据库把id属性列表取出来,然后再根据id列表一个一个load(),如果缓存有从缓存取,如果缓存没有就从数据库取:select s.id,

liu372267001的专栏 5027

hibernate查询缓存_Hibernate查询缓存如何工作

hibernate查询缓存 介绍 现在,我已经介绍了实体和集合缓存,现在该研究查询缓存的工作原理了。 查询缓存与实体严格相关,它在搜索条件和满足该特定查询过滤器的实体之间绘制关联。 像其他Hibernate功能一样,查询缓存也不像人们想象的那么琐碎。 实体模型 对于我们的测试用例,我们将使用以下域模型: Post实体与Author 具有多对一关联,并且两个实体都存储在第二级缓...

最佳 Java 编程 900

Hibernate缓存查询缓存

Hibernate缓存☞一级缓存 Hibernate缓存☞二级缓存 Hibernate缓存查询缓存 Hibernate缓存☞总结 网上说 query.setCacheable(true) 或criteria.setCacheable(true) 这两种方式的缓存命中率低,个人认为谈论这个“无卵用”; 我在测试的时候发现,上面的操作会受配置的限制,必须在配

Sucre 2930

Hibernate开启查询缓存

由于查询缓存,依赖于二级缓存,所以先必须开启二级缓存!! 步骤如下: 首先,通过配置文件开启查询缓存      情况一,项目有hibernate.cfg.xml文件                     通过修改hibernate.cfg.xml文件,开启查询缓存功能 true org.hibernate.cache.EhCacheProvider tru

yh_zeng2的博客 1453

Hibernate缓存——查询缓存

Hibernate缓存——查询缓存 默认情况下关闭设置的缓存对HQL和QBC查询时无效,需要打开查询缓存查询缓存依赖于二级缓存。 1.设置          true 2.在打开了查询缓存之后,需要注意,调用query.list()操作之前,必须显式调用query.setCachable(true)来标识某个查询使用缓存。   pu

fkngl的博客 1288

Hibernate 二级缓存查询缓存

二级缓存查询缓存都相当于一个map。 二级缓存缓存的key为id,value为实体对象。一般load,get ,iterate使用到二级缓存list()需要结合查询缓存使用。 iterate和list区别如下: iterate不需要开启查询缓存,它首先发出一个sql如”select s.id from Student s”去数据库把id属性列表取出来,然后再根据id列表一个一个load(

java_fancy的专栏 2832

Hibernate旅程(九)Hibernate缓存机制--查询缓存

Hibernate查询缓存 我们介绍了Hibernate一级缓存,二级缓存。而hibernate二级缓存时针对Id查询缓存策略,对于条件查询则毫无作用。因此hibernate提供了针对条件查询的QueryCache(查询策略)。 下面来看session控制的查询缓存。 一、查询缓存配置 1、          在hibernate.cfg.xml中加入查询缓存

Xinghf 3185

hibernate查询缓存和二级缓存的配合使用

只开启查询缓存,不开启二级缓存是没有意义的。上一篇博客可以看出,不开启二级缓存,iterate()方法存在N+1次数据库查询问题,list方法最多只能命中id,也需要N次数据库查询,无论是哪儿种情况,查询缓存已经失去了意义。通过开启查询缓存和二级缓存,同样的sql查询可以直接使用查询缓存中的id和二级缓存中的实体对象,能够有效的减少重复的数据库查询,能够提高查询效率。也就是说:同时开启查询缓存和二级缓存是有意义的,也是实际使用hibernate的最佳配置。

aty 1601

hibernate查询缓存_深入研究Hibernate查询缓存

hibernate查询缓存 我已经很长时间没有使用过Hibernate了,甚至更久没有写过博客了 。 最近,我在建立常绿缓存的工作范围内撰写博客文章。 在编写演示代码时,我遇到了一些与Hibernate查询缓存有关的问题:它没有按我预期的那样工作。 终于,一段时间后,我设法解决了这个问题。 这篇文章旨在更深入地研究Hibernate的Query Cache,以帮助遇到同样问题的其他开发人员...

dlz00001的博客 627

Hibernate一级缓存、二级缓存以及查询缓存的关系

前两天总结了一下二级缓存查询缓存的关系,但是又有一个新的问题,就是查询缓存缓存到二级缓存的数据,在第三次(第一次缓存中没有数据,查询数据库将对应的ID值存入到二级缓存中去,第二次如果是同一个Session那么将会把数据一级缓存中的数据返回,如果不是同一个Session而是同一个sessionfactory,那么将会把二级缓存中的数据返回,同时将数据放入到一级缓存中去)获取的时候,不使用查询缓存

maoyeqiu的专栏 4565

Hibernate缓存查询缓存简述

Hibernate独有的查询缓存

SirouW的博客 581

hibernate二级缓存查询缓存之间的关系

我们先看一下什么样的hibernate操作会将数据存入到一级缓存中去,当调用下边这些方法的时候会将数据存入到一级缓存中 一级缓存 save、update、saveOrupdate、load、list、iterate、lock,例如: User userOne=new User(); user.setName("名字"); //放入一级缓存 s.save(user); //查

maoyeqiu的专栏 6994
上一篇: hibernate二级缓存攻略
下一篇: Hibernate备忘
redphoenix
博客等级 码龄23年 2粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值