概念:

1.什么是缓存呢?

缓存:是计算机领域的概念,它介于应用程序和永久性数据存储源之间。

缓存:一般人的理解是在内存中的一块空间,可以将二级缓存配置到硬盘。用白话来说,就是一个存储数据的容器。我们关注的是,哪些数据需要被放入二级缓存。

作用:降低应用程序直接读写数据库的频率,从而提高程序的运行性能。缓存中的数据是数据存储源中数据的拷贝。缓存的物理介质通常是内存。

2.缓存在软件系统中的位置

3.hibernate的缓存一般分为几种?

分为三种:一级缓存,二级缓存和查询缓存

4.一级缓存

01.session内的缓存即一级缓存,内置且不能被卸载,一个事务内有效。在这个空间存放了相互关联的Java对象,这种位于session缓存内的对象也别称为持久化对象,session负责根据持久化对象的状态变化来同步更新数据库。

02.session为应用程序提供了管理缓存的方法:evict(Object o)和clear()

03.一级缓存结论

一级缓存的生命周期和session的生命周期一致,当前session一旦关闭,一级缓存就消失了,因此一级缓存也叫session级的缓存或事务级缓存,一级缓存只存实体对象,它不会缓存一般的对象属性(查询缓存可以),即当获得对象后,就将该对象缓存起来,如果在同一session中再去获取这个对象时,它会先判断在缓存中有没有该对象的id,如果有则直接从缓存中获取此对象,反之才去数据库中取,取的同时再将此对象作为一级缓存处理。

04.以下方法支持一级缓存

* get()

* load()

* iterate(查询实体对象)

其中 Query 和Criteria的list() 只会缓存,但不会使用缓存(除非结合查询缓存)。

5.二级缓存

01.二级缓存是进程(N个事务)或集群范围内的缓存,可以被所有的Session共享,在多个事务之间共享。

02.二级缓存是可配置的插件

03.二级缓存的散装数据

注意:如果缓存中的数据采用对象的散装数据形式,那么当不用的事务到缓存中查询OID为1的Customer对象时,获得的是Customer对象的散装数据,每个事务都必须分别根据散装数据重新构造出Customer实例,也就是说,每个事务都会获得不同的Customer对象。

04.二级缓存机制

05.二级缓存分为:类级别缓存,集合级别缓存,更新时间戳和查询缓存。

06.二级缓存的散装原理图

07.类级别的二级缓存只适用于get和load获取数据,对query接口的list()可以将数据放置到类级别的缓存中,但不能使用query接口的list()从缓存中获取数据。

08.注意点:修改一级缓存的数据,会自动同步到二级缓存。

09.二级缓存结论

二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有session共享,二级缓存的生命周期和SessionFactory的生命周期一致。hibernate为实现二级缓存,只提供二级缓存的接口供第三方实现。二级缓存也是缓存实体对象,原理和方法都与一级缓存差不多,只是生命周期有所差异。

6.查询缓存

01.查询是数据库技术中最常用的操作,Hibernate为查询提供了缓存,用来提高查询速度,优化查询性能相同HQL语句检索结果的缓存!

02.查询缓存依赖于二级缓存,查询缓存是针对普通属性结果集的缓存,对实体对象的结果集只缓存id(其id不是对象的真正id,可以看成是HQL或者SQL语句,它与查询的条件相关即where后的条件相关,不同的查询条件,其缓存的id也不一样)。查询缓存的生命周期,当前关联的表发生修改或是查询条件改变时,那么查询缓存生命周期结束,它不受一级缓存和二级缓存生命周期的影响,要想使用查询缓存需要手动配置。

7.结论

不要想当然的以为缓存可以提高性能,仅仅在你能够驾驭它并且条件合适的情况下才是这样的。hibernate的二级缓存限制还是比较多的。在不了解原理的情况下乱用,可能会有1+N的问题。不当的使用还可能导致读出脏数据。 如果受不了hibernate的诸多限制,那么还是自己在应用程序的层面上做缓存吧。

在越高的层面上做缓存,效果就会越好。就好像尽管磁盘有缓存,数据库还是要实现自己的缓存,尽管数据库有缓存,咱们的应用程序还是要做缓存。因为底层的缓存它并不知道高层要用这些数据干什么,只能做的比较通用,而高层可以有针对性的实现缓存,所以在更高的级别上做缓存,效果也要好些吧。

缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能.      Hibernate在查询数据时,首先到缓存中去查找,如果找到就直接使用,找不到的时候就会从物理数据源中检索,所以,把频繁使用的数据加载到缓存区后,就可以大大减少应用程序对物理数据源的访问,使得程序的运行性能明显的提升.

转载于:https://www.cnblogs.com/yangsongxiao/p/6380521.html

Hibernate 一级缓存,二级缓存,查询缓存相关推荐

  1. Hibernate学习——(十二)Hibernate缓存机制(一级、二级、查询)

    一.why(为什么要用Hibernate缓存?) Hibernate是一个持久层框架,经常访问物理数据库. 为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能. 缓存内的数据是对物理数 ...

  2. 我的架构梦:(二)MyBatis的一级、二级、分布式缓存的应用以及源码分析

    mybatis的一级.二级.分布式缓存的应用以及源码分析 一.mybatis缓存 二.一级缓存 三.一级缓存源码分析 四.二级缓存 五.二级缓存整合redis 六.二级缓存整合redis源码分析 一. ...

  3. 刷新查询缓存 mysql_MySQL刷新查询缓存

    让我解释为什么它没有帮助. 您的要求:在这里您尝试再次运行相同的查询,但是您希望它仅通过清理缓存来执行第一次运行. 当查询运行时,有多种类型的缓存进入图片. "查询缓存"是我们谈论 ...

  4. hibernate查询缓存_在Hibernate中启用实体和查询缓存

    hibernate查询缓存 1.简介 在我执行过的与性能相关的任务中,这就是其中之一. 令人担心的是,如果对于特定实体每次都调用相同的查询,并且表数据在特定的时隙内不易更改,则我们可以使用Hibern ...

  5. 在Hibernate中启用实体和查询缓存

    1.简介 在我执行过的与性能相关的任务中,这就是其中之一. 令人担心的是,如果每次为特定实体调用相同的查询,并且表数据在特定的时隙内不易更改,则我们可以使用Hibernate缓存查询结果. 这意味着, ...

  6. Hibernate 缓存机制续 - 查询缓存

    对于一个应用来说,最多的操作是查询,而并非是写入和更改,如果能将查询缓存起来,那么能够有效提升效率. Hibernate的查询缓存是基于二级缓存的,所以,如果想使用查询缓存,必须先开启二级缓存. 1. ...

  7. mysql 查看某个表缓存情况_MySQL 查询缓存 QUERY_CACHE

    保存查询返回的完整结果.当查询命中该缓存,MySQL会立即返回结果,跳过解析.优化和执行阶段. 官方在特定环境测试结果(官方文档中有详细说明): 1.如果对某表进行简单查询,但每次查询条件都不一样时, ...

  8. mysql缓存 碎片_Mysql查询缓存碎片、缓存命中率及Nagios监控

    Mysql 的优化方案,在互联网上可以查找到非常多资料,今天对Mysql缓存碎片和命中率作了详细了解,个人作了简单整理. 一.Mysql查询缓存碎片和缓存命中率. mysql> SHOW STA ...

  9. mysql 查询缓存设置_MySQL查询缓存设置 提高MySQL查询性能

    从 MySQL4开始,出现了QueryCache查询缓存,如果使用了QueryCache,当查询接收到一个和之前同样的查询,服务器将会从查询缓存种检索结果,而不是再次分析和执行上次的查询.这样就大大提 ...

  10. mysql 缓存优缺点_MySQL查询缓存的优缺点

    任职DBA一年多了,更正下博客. 其实MySQL8.0已经取消了查询缓存.如果是小型项目,又不想用Reids或者MC等缓存,查询结果相对固定,可以在MySQL5.7以下版本设置缓存. ######## ...

最新文章

  1. web python 自动化是什么_Selenium 凭什么成为 Web 自动化测试的首选?(内附源码)...
  2. python perl 日本的应用_将perl-soap应用程序移植到python
  3. Leetcode-169 Majority Element
  4. C++ Primer 5 CH4 表达式
  5. Swift快速入门(一)第一个Swift程序
  6. linux舵机控制程序,Linux PWM设备驱动及舵机控制
  7. DT大数据梦工厂 第72,73讲
  8. 基于AD9833的三角波及正弦波发生器资料(含51程序)
  9. 一起学习MySQL(基础阶段已完结)
  10. Java //PP2.14 按照以下要求修改程序Snowman: ·在其身上添加两个红色按钮。·将雪人的表情由笑脸变成皱眉。·把太阳移动到图片的右上角。·在图片左上角显示你的名字。。。
  11. 那,那,那,轻灵的舞影,绝美的身姿──对上古绚丽舞姿的乱谈
  12. 间谍用GAN生成“红发美女”!潜入美国政坛,全网广钓政客
  13. kubernetes v1.20项目之部署二进制安装_系统环境配置
  14. 带有三角函数的计算机,三角函数计算器
  15. wps linux 程序转pdf文件,wps转pdf服务器
  16. 191210P4 Java富文本编辑之图片链接本地化
  17. 某厂生产三种产品 I, II, III。 每种产品要经过 A、 B两道工序加工。 设该厂有两种规格的设备能完成 A 工序, 它们以A1、 A2表示; 有三种规格的设备能完成 B 工序, 它们以B1、
  18. 【PROCESSING 游戏编程】之黄金矿工
  19. web开发入门(转载)
  20. SwiftUI 高级之List Sqlite 分页合集(古代诗词名人App)

热门文章

  1. iOS Hacker Xcode7免登录开发者账号打包ipa
  2. vs2008环境下MFC对注册表的读写操作
  3. 惯性传感器的卡尔曼滤波
  4. C++文件打开模式详解
  5. Leetcode题库 15.三数之和_1(双指针 C实现)
  6. java链接mysql出问题_java连接MySQL出现问题
  7. mysql分组后去重复数据_mysql去掉重复数据只保留一条,以及取分组后的一条数据...
  8. 如何计算给定一个unigram语言模型_n-gram语言模型原理到实践
  9. 固定收益证券(fixed income)
  10. Oralce中日期格式