面试官:虫虫你简历上写了了解mybatis缓存,那你能说说一级缓存和二级缓存的区别吗?

虫虫:我只知道这是用来缓存sql查询的数据

面试官:没了?

虫虫:没了

面试官:公司门知道在哪里吧 自己走还是我送你

以上是虫虫的面试经历 于是虫虫决定恶补一下Mybatis缓存机制的知识

Mybatis的缓存,包括一级缓存和二级缓存

Mybatis对缓存提供支持,一级缓存是默认使用的

二级缓存需要手动开启

区别:一级缓存的作用域是一个sqlsession内;二级缓存作用域是针对mapper进行缓存.

一级缓存:

在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。

一级缓存时执行commit,close,增删改等操作,就会清空当前的一级缓存;当对SqlSession执行更新操作(update、delete、insert)后并执行commit时,不仅清空其自身的一级缓存(执行更新操作的效果),也清空二级缓存(执行commit()的效果)。

二级缓存:

二级缓存指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。

1、在配置文件中 开启二级缓存的总开关

<setting name="cacheEnabled" value="true" />

2、 在mapper映射文件中开启二级缓存

<cache eviction="FIFO" flushInterval="60000" size="512"
readOnly="true"/>

参数名属性eviction收回策略flushInterval刷新间隔size引用数目readOnly只读

关于eviction的各个参数属性:

参数名属性eviction="LRU"最近最少使用的:移除最长时间不被使用的对象。 (默认)eviction="FIFO"先进先出:按对象进入缓存的顺序来移除它们。eviction="SOFT"软引用:移除基于垃圾回收器状态和软引用规则的对象。eviction="WEAK"弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

3、实体类实现Serializable

禁用缓存

如测试sql语句性能时缓存会影响测试准确性 需要禁用在映射文件中:默认值是true useCache=”false”

<select id="findAllPets" resultMap="petsMap" useCache="false">select * from pets
</select>

刷新缓存

在映射文件中:属性:flushCache=”true”刷新缓存,在查询语句中,默认值是false,在新增删除修改语句中,默认值是true(清空缓存)

作者:愿做Bookworm
链接:https://segmentfault.com/a/1190000023156524?utm_source=tag-newest

swf缓存文件在哪里_面试官:mybatis一级缓存二级缓存的区别都不知道,知道门在哪吧...相关推荐

  1. Mybatis3.4.x技术内幕(二十二):Mybatis一级、二级缓存原理分析

    2019独角兽企业重金招聘Python工程师标准>>> Mybatis的一级缓存,指的是SqlSession级别的缓存,默认开启:Mybatis的二级缓存,指的是SqlSession ...

  2. mybatis一级,二级缓存。缓存带来的脏读问题

    title 1. 关于缓存的介绍 2. 一级缓存,默认开启,session级别 3. 二级缓存,mapper 的namespace级别 1. 关于缓存的介绍 Mybatis一级缓存的作用域是同一个Sq ...

  3. bilibili缓存文件在哪里_面试官:你知道什么是网络缓存吗?了解原理?多级缓存架构知道?

    引言 随着一阵阵秋风吹过和一场场秋雨降临,天气早已由热转凉.在这准备步入严寒之际.起早的吒吒辉辉紧紧裹了下被子,鼻子依旧竖立着大鼻涕在那键盘上啪啪啪敲打着.想必大家此刻依旧在清晨甜美的梦乡之中,此刻唯 ...

  4. python怎么接收udp报文_面试官:说说UDP和TCP的区别及应用场景

    上一篇聊完一文彻底搞懂 TCP三次握手.四次挥手过程及原理 这次聊聊TCP和UDP的区别和场景 TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP.来看看传输层位于OSI七层协议 ...

  5. jar打包 剔除第三方依赖以及它的依赖_面试官:为什么Spring Boot的jar可以直接运行?...

    来源:Gormat's Notes fangjian0423.github.io/2017/05/31/springboot-executable-jar/ Spring Boot Loader抽象的 ...

  6. dubbo调用失败策略_面试官:dubbo负载均衡策略,集群容错策略,动态代理策略有哪些...

    面试官心理分析 继续深问吧,这些都是用 dubbo 必须知道的一些东西,你得知道基本原理,知道序列化是什么协议,还得知道具体用 dubbo 的时候,如何负载均衡,如何高可用,如何动态代理. 说白了,就 ...

  7. nodejs express use 传值_再也不怕面试官问你express和koa的区别了

    前言 用了那么多年的express.js,终于有时间来深入学习express,然后顺便再和koa2的实现方式对比一下. 老实说,还没看express.js源码之前,一直觉得express.js还是很不 ...

  8. golang实现的布隆过滤器_面试官:都 2020 年,你在干嘛?还不知道布隆过滤器

    关注过 @Python大星 的小伙伴应该知道,2020 年 4 月 Python 小星最近裸面了阿里巴巴菜鸟网络科技有限公司. 一面中面试官非常重视解决 Redis 缓存穿透问题的利器--布隆过滤器, ...

  9. 上一家单位离职的原因_面试官:你为什么从上一家公司离职?小伙更换答案后,立马被录取...

    分享职场故事,交流职场经验,欢迎关注"闫湘". 01 面试被秒拒:谁让你瞎说大实话 赵东在上一家公司离职之后,就立刻投入了求职大潮,但是现在的工作情况并不乐观.因为虽然岗位众多,但 ...

最新文章

  1. centos7安装tomcat8.5.46版本碰到的问题
  2. MyEclipse的自动补全功能:输入@或者.没提示
  3. 北大博士的论文发表经验:快写、细改、慢投
  4. Xshell7免费版申请无需破解
  5. MTK平台Camera驱动流程分析
  6. 博主力推!!NRF52832 BLE 抓包sniffer来了!附带安装使用说明
  7. 新浪云python示例_在新浪云安装Python应用
  8. 创业感悟:有舍才会得,舍得才见风景
  9. jcp jsr_JCP成为“可怕的单一文化”
  10. 笔记本如何禁用触摸板
  11. PCI/CA体系下使用USBkey实现认证与加密(一)整体架构
  12. 手工选出的股票池和量化选股模型选出的股票池有哪些区别?
  13. DSS 決策支援系統
  14. Mac平台工具介绍-视频播放器篇
  15. PMP与ACP有什么区别?
  16. activiti工作流在线表单设计功能(activiti + ueditor + Ueditor Web Form De
  17. 自己实现一个complex class(复数类)
  18. 隆重推荐kmplayer播放器——我的最爱播放器
  19. IP地理位置定位系统之应用场景划分
  20. vue+wps(wps-view-vue)

热门文章

  1. 2017计算机应用+简答,2017计算机应用基础试题及答案
  2. c语言程序设计开封电大,最新电大《C语言程序设计》题库及答案.docx
  3. jmeter对乱码如何处理_JMeter中文乱码的解决
  4. elasticsearch中rollover的用法
  5. 二十九、电子商务服务推荐项目基本描述
  6. 太恐怖了,Linux服务器感染了kerberods病毒...
  7. mysql root 访问被拒绝_用户'root'@'localhost'的访问被拒绝-Spring Boot和MySQL连接
  8. mysql 执行计划不对_关于mysql主从查询执行计划不一致问题的分析
  9. GAN生成对抗网络-CycleGAN原理与基本实现-图像转换-10
  10. mysql免安装服务器配置_MYSQL免安装环境配置