MyBatis:一级缓存和二级缓存
这里写目录标题
- 一. 概念
- 1.1 定义
- 1.2 作用
- 1.3 使用场景
- 二. MyBatis一级缓存
- 2.1 引入
- 2.2 简介
- 2.3 生命周期
- 三. MyBatis二级缓存(全局缓存)
- 3.1 简介
- 3.2 何时存入
- 3.3 过期时间
一. 概念
1.1 定义
缓存是存在于内存中的临时数据;
1.2 作用
查询的时候从缓存读取,能减少和数据库的交互,提高效率;
1.3 使用场景
(1)适合用缓存:
- 经常查询并且不常改变的;
- 数据的正确与否对最终结果影响不大;
(2)不适合用缓存:
- 经常改变的数据;
- 数据的正确与否对结果影响较大的;
二. MyBatis一级缓存
2.1 引入
当使用Mybatis进行数据库的操作时候,会创建一个SqlSession
来进行一次数据库的会话,会话结束则关闭SqlSession对象。
如果我们很有可能多次查询完全相同的sql语句,每一次查询都查询一次数据库,那查询数据库代价是比较大的,这会导致系统的资源浪费;
为了解决这个问题,Mybatis对每一次会话都添加了缓存操作,相同的SQL不用再查数据库;
2.2 简介
一级缓存是 默认开启 的。
一级缓存作用域是sqlsession
级别的;
同一个sqlsession中执行相同的sql查询(相同的sql和参数),第一次会去查询数据库并写到缓存中,后序的查询将会从一级缓存读取,而不会查数据库,提升了效率。
2.3 生命周期
MyBatis在开启一个数据库会话时,会创建一个新的SqlSession
对象,当会话结束时,SqlSession对象会被释放掉。
即一级缓存的生命周期是一次会话。
三. MyBatis二级缓存(全局缓存)
3.1 简介
二级缓存是 默认关闭 的。
二级缓存是 Mapper
映射文件级别的缓存,多个 SqlSession 去操作同一个 Mapper 的 sql 语句,多个 SqlSession 可以共享二级缓存,二级缓存是跨 SqlSession 的全局变量。
当 Mybatis 调用 Dao 层查询数据库时,先查询二级缓存,二级缓存中无对应数据,再去查询一级缓存,一级缓存中也没有,最后去数据库查找。
3.2 何时存入
在关闭sqlsession后(close),才会把该sqlsession一级缓存中的数据添加到namespace的二级缓存中。
开启了二级缓存后,还需要将要缓存的pojo实体类实现Serializable接口,为了将缓存数据取出执行反序列化操作,因为二级缓存数据存储介质多种多样,不一定只存在内存中,有可能存在硬盘中。
3.3 过期时间
当存取数据的时候,都有检测一下cache的生命时间,默认是1小时,如果这个cache存活了一个小时,那么将整个清空一下。
参考:
https://blog.csdn.net/guorui_java/article/details/118095020
https://mikechen.cc/17833.html
https://zhuanlan.zhihu.com/p/388720463
MyBatis:一级缓存和二级缓存相关推荐
- Mybatis一级缓存,二级缓存的实现就是这么简单
介绍 又到了一年面试季,所以打算写一点面试常问的东西,争取说的通俗易懂.面试高级岗,如果你说熟悉Mybatis,下面这些问题基本上都会问 Mybatis插件的实现原理? 如何写一个分页插件? Myba ...
- mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存
设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --><settings& ...
- MyBatis框架:延迟加载策策略、一级缓存、二级缓存
MyBatis框架:延迟加载策略和缓存 Mybatis 延迟加载策略 1.1 何为延迟加载? 1.2 实现需求 1.3 使用association实现延迟加载 1.3.1 账户的持久层DAO接口 1. ...
- 浅谈Mybatis的一级缓存和二级缓存
MyBatis的缓存机制 缓存的引入 当我们大量执行重复的查询SQL语句的时候,会频繁的和数据库进行通信,会增加查询时间等影响用户体验的问题,可以通过缓存,以降低网络流量,使网站加载速度更快. MyB ...
- MyBatis】MyBatis一级缓存和二级缓存
转载自 MyBatis]MyBatis一级缓存和二级缓存 MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存.一级缓存的作用域默认是一个SqlSe ...
- Mybatis 详解--- 一级缓存、二级缓存
2019独角兽企业重金招聘Python工程师标准>>> Mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSession级别的缓存.在操作数据 ...
- Mybatis源码分析之(七)Mybatis一级缓存和二级缓存的实现
文章目录 一级缓存 二级缓存 总结 对于一名程序员,缓存真的很重要,而且缓存真的是老生常谈的一个话题拉.因为它在我们的开发过程中真的是无处不在.今天LZ带大家来看一下.Mybatis是怎么实现一级缓存 ...
- 框架源码专题:Mybatis的一级缓存、二级缓存是什么?有什么作用?
文章目录 1. Mybatis中缓存的作用 2. 一级缓存 3. 二级缓存 4. 一级缓存和二级缓存的区别 5. 通过代码观察Mybatis缓存工作的全过程 1. Mybatis中缓存的作用 首先缓存 ...
- MyBatis中的一级缓存和二级缓存介绍
先说缓存,合理使用缓存是优化中最常见的,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据库的压力,同时提高系统性能. 一级缓存 一级 ...
- mybatis 详解------ 一级缓存、二级缓存(九)
mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSession级别的缓存.在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMa ...
最新文章
- eslint vscode 自动格式化_配置VSCode编辑器适配VUE3开发
- Python常用模块之hashlib模块
- oracle 11g ORA-12541: TNS: 无监听程序 (DBD ERROR: OCIServerAttach)
- 免费的微软OneCare防病毒软件
- WinSock I/O 模型 -- WSAEventSelect 模型
- java cms bootstrap_thinkcms: Java CMS系统,完善的后台功能,大气的前台页面.
使用springMVC,hibernate,bootstrap,amazeui....
- 聊聊有哪些参与项目的好途径吧
- pytorch中获取指定位置元素
- hive 如果表不存在则创建_从零开始学习大数据系列(四十七) Hive中数据的加载与导出...
- 利用poi开源jar包操作Excel时删除行内容与直接删除行的区别
- 服务器压力测试_性能测试相关的面试题
- macOS 12 Monterey 推出首个测试版本
- 兄弟连教育分享:用CSS实现鼠标悬停提示的方法
- 灵敏度和稳定性能兼具 新气体传感器技术适用于工业应用
- QQ for linux
- QQ影音播放器 for Mac
- SAP License:ERP实施方案包括哪些内容?
- C++:缺省参数是怎样设置的?
- CMOS图像传感器工作原理
- linux ubuntu木马,Ubuntu病毒查杀 ClamAV 简介以及适用范围
热门文章
- 开tbc服务器维护吗,官方消息:关于TBC服务器分离,还有全新的轮回服务器
- 谷歌无人车开创者敲钟上市!平台型自动驾驶第一股市值130亿美元
- vim 显示行号 (Linux)
- iphone导出视频 无法连接到设备_Mac上iPhone数据恢复软件 Cisdem iPhone Recovery 破解版...
- intellij idea 改变文字背景色
- think5php的使用,实例分享Thinkphp5行为使用方法
- 手机上的计算机黑屏怎么办,电脑黑屏不显示怎么办?不花钱就能解决的方法,分分钟教会你!...
- Linux环境下的Qt5编程(闹钟)
- 微信python小课_微信公众号广告案例:Pytnon小课
- 安卓传输文件Linux,你知道Linux下的安卓文件传输助手的作用?