hibernate mysql缓存机制_Hibernate的缓存机制
面试常问到的问题;
首先说下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的缓存机制相关推荐
- hibernate mysql 关联查询_hibernate 查询缓存,以及在关联表查询缓存下使用HQL,而不是sql去查询...
什么是查询缓存? 也就是如果开启了查询缓存, 在 没有使用二级缓存的情况下,会 缓存第一次查询出来的数据的id. 第二次查询的时候, 如果查询的参数和查询语句没有变化,那么就会使用 第一次查询的出来的 ...
- hibernate mysql 关联查询_Hibernate关联映射及高级查询
一.Hibernate中的关联关系 1.1.单向一对多关联关系 按照以下步骤配置hibernate中持久化类的一对多对象关联: (1).持久化类添加关联类的相关属性及getter/setter方法. ...
- hibernate mysql 设置时区_Hibernate连接MYSQL失败提示时区错误该怎么解决?
平台: WIN10 X64 专业版. IDEA 2016.1.1. MYSQL 5.7.12 hibernate 4.2.2 具体问题: 用hibernate连接MYSQL数据库的时候提示 ERROR ...
- hibernate mysql自定义变量_hibernate如何得到mysql的变量
你这执行的是纯sql,貌似有的hibernate版本不能直接用sql操作mysql数据库,我猜你没在别的方法里用SQLQuery,如果其他地方可以执行那我给你的办法你就不用看了.我当时遇到过hiber ...
- hibernate mysql自定义变量_hibernate 跟 MySql in的参数变量
hibernate 和 mysql in的参数变量 Mysql : select appid from mem_apps where appid in (?) 如果?=25,3 那么此语句的结果只有一 ...
- hibernate mysql 时间比较_Hibernate中HQL函数汇总及获取当前时间进行比较举例
在很多时候,我们负责的项目中,在数据访问层(DAO层)通常我们会使用sql语句或者hql语句,而在我们使用hql语句拼接时有时会报错,通常的原因是:我们使用了标准的sql语句,开启的确是hiberna ...
- mysql缓存淘汰机制_聊聊缓存淘汰算法-LRU 实现原理
前言 我们常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来.缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据.常用淘 ...
- Hibernate 缓存机制续 - 查询缓存
对于一个应用来说,最多的操作是查询,而并非是写入和更改,如果能将查询缓存起来,那么能够有效提升效率. Hibernate的查询缓存是基于二级缓存的,所以,如果想使用查询缓存,必须先开启二级缓存. 1. ...
- Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...
点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 于哥你好,最近面试挺多的,尤其是在问到java面试题,Redis被问的特别多,比如Red ...
最新文章
- android-Bitmap,View,Canvas大综合
- 系统提供的按钮和图标
- 公众号 关注_微信公众号关注图文跳转网页如何操作实现?
- 编程类-----matlab基础语法复习(1)
- H5页面左图右边文字如何布局
- 苹果Mac如何在全屏幕模式下使用 App?
- 拓端tecdat|R语言Metropolis Hastings采样和贝叶斯泊松回归Poisson模型
- 解决intellij idea卡顿的方法
- Tensorflow-wavenet生成模拟声音
- 用MATLAB求系统状态方程,利用MATLAB求解系统的状态方程..doc
- 清北学堂模拟赛d4t4 a
- 006-Android-ContentProvider习题
- 适合所有手环的app_Redmi Watch体验:手环终结者?
- 服务端使用GZIP压缩数据
- js:使用nodejs为页面传递mysql中的数据
- 现在哪里有卖鸡腿面包的?
- endnote添加引文格式
- Linux传输文件 rz
- 今天来详细说一说贴片三极管
- Golang 调用http 文件上传接口 进行上传文件
热门文章
- java当中的定时器怎么做_java当中的定时器的4种使用方式
- linux i2c ioctl错误,关于读写I2C总线的时候出错的有关问题
- ApplicationStartedEvent 与 ContextStartedEvent 有区别吗?
- Windows XP 源代码泄露,微软终于回应了~
- Stack Overflow 2020 开发者调查中的 21 条关键结果
- 13种老人不适合带孩子_这十三种老人不适宜带孩子,亲爹亲妈们慎重!
- 【alibaba-cloud】nacos详解
- 困难样本挖掘(Online Hard Sample Mining)
- Anaconda 默认环境
- nn.CrossEntropyLoss()