面试常问到的问题;

首先说下hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存分类情况,最后可以举例;

Hibernate缓存的作用:

Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据Hibernate缓存分类:

Hibernate缓存包括两大类:一级缓存和二级缓存。

Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消Session缓存,也是Hibernate缓存机制默认的缓存)。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存,第一级缓存是必须的,不允许而且事实上也无法卸除。在一级缓存中,持久化类的每个实例都具有唯一的OID。

Hibernate二级缓存又称为“sessionFactory的缓存”(类缓存,集合缓存,查询缓存)。由于SessionFactory对象生命周期和应用要采用的整个过程对应,因此Hibernate二级缓存的数据提供范围或集群范围的缓存,有可以出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。(也就是要手动启动)

怎么样配置?

还有就是在mapper文件里配,至于什么可以百度一下Hibernate二级缓存以及ehcache的搭建配置 - CSDN博客​blog.csdn.net

什么样的数据适合存放到第二级缓存中?很少被修改的数据

不是很重要的数据,允许出现偶尔并发的数据

不会被并发访问的数据

常量数据

不适合存放到第二级访问的数据经常被修改的数据

绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发

以其他应用共享的数据

Hibernate查找对象如何应用缓存?

当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存,删除、更新、增加数据的时候,同时更新缓存。Hibernate管理缓存实例无论何时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。 当随后flush()方法被调用时,对象的状态会和数据库取得同步。 如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。

hibernate mysql缓存机制_Hibernate的缓存机制相关推荐

  1. hibernate mysql 关联查询_hibernate 查询缓存,以及在关联表查询缓存下使用HQL,而不是sql去查询...

    什么是查询缓存? 也就是如果开启了查询缓存, 在 没有使用二级缓存的情况下,会 缓存第一次查询出来的数据的id. 第二次查询的时候, 如果查询的参数和查询语句没有变化,那么就会使用 第一次查询的出来的 ...

  2. hibernate mysql 关联查询_Hibernate关联映射及高级查询

    一.Hibernate中的关联关系 1.1.单向一对多关联关系 按照以下步骤配置hibernate中持久化类的一对多对象关联: (1).持久化类添加关联类的相关属性及getter/setter方法. ...

  3. hibernate mysql 设置时区_Hibernate连接MYSQL失败提示时区错误该怎么解决?

    平台: WIN10 X64 专业版. IDEA 2016.1.1. MYSQL 5.7.12 hibernate 4.2.2 具体问题: 用hibernate连接MYSQL数据库的时候提示 ERROR ...

  4. hibernate mysql自定义变量_hibernate如何得到mysql的变量

    你这执行的是纯sql,貌似有的hibernate版本不能直接用sql操作mysql数据库,我猜你没在别的方法里用SQLQuery,如果其他地方可以执行那我给你的办法你就不用看了.我当时遇到过hiber ...

  5. hibernate mysql自定义变量_hibernate 跟 MySql in的参数变量

    hibernate 和 mysql in的参数变量 Mysql : select appid from mem_apps where appid in (?) 如果?=25,3 那么此语句的结果只有一 ...

  6. hibernate mysql 时间比较_Hibernate中HQL函数汇总及获取当前时间进行比较举例

    在很多时候,我们负责的项目中,在数据访问层(DAO层)通常我们会使用sql语句或者hql语句,而在我们使用hql语句拼接时有时会报错,通常的原因是:我们使用了标准的sql语句,开启的确是hiberna ...

  7. mysql缓存淘汰机制_聊聊缓存淘汰算法-LRU 实现原理

    前言 我们常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来.缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据.常用淘 ...

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

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

  9. Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 于哥你好,最近面试挺多的,尤其是在问到java面试题,Redis被问的特别多,比如Red ...

最新文章

  1. android-Bitmap,View,Canvas大综合
  2. 系统提供的按钮和图标
  3. 公众号 关注_微信公众号关注图文跳转网页如何操作实现?
  4. 编程类-----matlab基础语法复习(1)
  5. H5页面左图右边文字如何布局
  6. 苹果Mac如何在全屏幕模式下使用 App?
  7. 拓端tecdat|R语言Metropolis Hastings采样和贝叶斯泊松回归Poisson模型
  8. 解决intellij idea卡顿的方法
  9. Tensorflow-wavenet生成模拟声音
  10. 用MATLAB求系统状态方程,利用MATLAB求解系统的状态方程..doc
  11. 清北学堂模拟赛d4t4 a
  12. 006-Android-ContentProvider习题
  13. 适合所有手环的app_Redmi Watch体验:手环终结者?
  14. 服务端使用GZIP压缩数据
  15. js:使用nodejs为页面传递mysql中的数据
  16. 现在哪里有卖鸡腿面包的?
  17. endnote添加引文格式
  18. Linux传输文件 rz
  19. 今天来详细说一说贴片三极管
  20. Golang 调用http 文件上传接口 进行上传文件

热门文章

  1. java当中的定时器怎么做_java当中的定时器的4种使用方式
  2. linux i2c ioctl错误,关于读写I2C总线的时候出错的有关问题
  3. ApplicationStartedEvent 与 ContextStartedEvent 有区别吗?
  4. Windows XP 源代码泄露,微软终于回应了~
  5. Stack Overflow 2020 开发者调查中的 21 条关键结果
  6. 13种老人不适合带孩子_这十三种老人不适宜带孩子,亲爹亲妈们慎重!
  7. 【alibaba-cloud】nacos详解
  8. 困难样本挖掘(Online Hard Sample Mining)
  9. Anaconda 默认环境
  10. nn.CrossEntropyLoss()