Mybatis二级缓存的缺陷_mybatis二级缓存的缺点-程序员宅基地

技术标签: 经典面试题  mybatis  MyBatis  

  • 一级缓存默认是开启的(但是整合了Spring,Mybatis的一级缓存默认就失效了)
  • 二级缓存是要手动配置开启的(二级缓存是mapper级别的缓存,可以跨SqlSession)

Mybatis二级缓存

开启二级缓存(xml方式):在*Mapper.xml中加入如下代码

<!--eviction: 清空缓存的策略
    readOnly: 是否只读
    flushInterval: 每个60秒刷新一次缓存
    size: 内存大小,最多存储结果对象或者列表的512个引用 -->
<cache readOnly="true" eviction="FIFO" flushInterval="60000" size="512"/>

缓存清除策略

  • LRU – 最近最少使用:移除最长时间不被使用的对象。
  • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
  • SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
  • WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。

两种方式二选一,如果都配置会报错:Caches collection already contains value for com.lixianhe.dao.UserMapper

注意:使用Mybatis二级缓存必须是xml写SQL语句,不能使用注解写SQL语句

缓存的执行顺序

  • 先从二级缓存中查询,二级缓存没有进入SqlSession中查询
  • SqlSession没有就去数据库查询,然后存到一级缓存中,查询完关闭SqlSession
  • 一级缓存再提交给二级缓存

在开启二级缓存的情况下执行一条sql

select colA1, colA2, colB1, colB2 
from A, B 
where ...
  1. A表执行了上述的sql
  2. B表更新了字段cloB1,colB2
  3. A表再次执行了上述的sql(前提没有执行insert、update、delete)

A表第二次就查询出了脏数据(B表的数据就是脏数据),这个问题对二级缓存来说是一个无解的问题

因此Mybatis二级缓存的使用用一个前提,必须保证所有的增删改查都在同一个namespace下才行

由于二级缓存的弊端,所以并不建议在实际生产中使用,而是在外部实现自己的缓存,如使用Redis做缓存

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_56750901/article/details/125530370

智能推荐

使用curl在命令行中下载文件_bat脚本 curl 下载文件夹下所有文件-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏5次。今天帮同学从一个网站上下载点数据, 但是上面有上百个链接, 一个一个点击下载实在是工作量太大。 于是自己就想找一个命令行下载工具并用Python写一个简单的脚本来替代这些工作。百度了一下, 找到了curlcurl: curl是利用URL语法在命令行方式下工作的文件传输工具。 [百科: http://baike.baidu.com/view/1326315.htm]官网: http:_bat脚本 curl 下载文件夹下所有文件

常用的原型开发工具-程序员宅基地

文章浏览阅读67次。1、Axure RP(Rapid Prototyping)Axure(读音为Ack-Sure)无疑是目前最受关注的原型开发工具,其能通过组件的方式帮助网站或软件设计师快速建立带有注释的原型(流程图、线框图),并凭借自定义可重用的元件、动态面板以及丰富的script能够建立基本功能或页面逻辑的动态演示文件。Axure借鉴了office的界面,能够让用户快速上手,并且提供了..._程序员原型法常用工具

nuiapp请求网络_uni-app 接口 - 网络请求-程序员宅基地

文章浏览阅读145次。1、 uni.request(OBJECT) 发起网络请求参数名 类型 必填 默认值 说明url String 是 开发者服务器接口地址data Object/String/ArrayBuffer 否 请求的参数header Object 否 设置请求的 header,header 中不能设置 Referer。method String 否 GET (需大写)有效值:OPTIONS, GET...

Vim命令学习参考_hadoop vim是什么操作-程序员宅基地

文章浏览阅读368次。1. 关于Vim1.1 Vim的几种模式2. 启动Vim3. 文档操作4. 光标的移动4.1 基本移动4.2 翻屏4.3 标记5. 插入文本5.1 基本插入5.2 改写插入6. 剪切复制和寄存器6.1 剪切和复制、粘贴6.2 文本对象6.3 寄存器7. 查找与替换7.1 查找7.2 替换7.3 正则表达式8. 排版8.1 基本排版8..._hadoop vim是什么操作

应用加速,数字人民币接入多地交通出行场景 | 产业区块链发展周报-程序员宅基地

文章浏览阅读3.1k次。摘要产业动态:微众银行多方大数据隐私计算平台通过信通院权威评测欧洲最大移动运营商沃达丰将为AI智能协议移动终端提供移动通信服务汇丰银行加入迪拜经济的阿联酋KYC区块链平台重庆市先进区块链研..._交通联合 小额支付

随便推点

TCPIP详解卷1第3章IP网际协议3.2IP首部3.3IP路由选择-程序员宅基地

文章浏览阅读164次。转载于:https://www.cnblogs.com/sunyongjie1984/p/4319969.html

linux which,whereis,locate,find的区别_linux中whereis locate which的区别-程序员宅基地

文章浏览阅读221次。find就不用多说了,就是递归遍历文件夹。which:有时候可能在多个路径下存在相同的命令,该命令可用于查找当前所执行的命令到底是哪一个位置处的命令。whereis:是在数据库中查找文件,在数据库(var/lib/slocate/slocate.db)中查找与文件名相匹配的二进 制文件、源文件和帮助手册文件,使用之前可以使用up..._linux中whereis locate which的区别

olat中解决查看gui_demo源代码异常或debug模式下查看源代码异常_guidemo_main不显示-程序员宅基地

文章浏览阅读1.2k次。出现这种异常是因为没有设置 project.build.home.directory 参数,系统找不到源代码文件的位置。解决办法:1.首先下载源代码,可参考如何下载olat源代码并在eclipse中查看2.在部署的服务中找到 olat.local.properti_guidemo_main不显示

自定义View-Rect和RectF_android根据rect坐标添加控件-程序员宅基地

文章浏览阅读1.4k次。Rect 类定义了一个矩形结构,同样实现了 Parcelable 序列化接口。Rect 类定义了 left、top、right、bottom 四个成员变量,我们需要正确理解这 4 个成员变量的作用:left:矩形左边线条离 y 轴的距离top:矩形上面线条离 x 轴的距离right:矩形右边线条离 y 轴的距离bottom:矩形底部线条离 x 轴的距离矩形是一种非常常见的图_android根据rect坐标添加控件

CCS5导入工程时出错:Issues that may require your attention were encountered while importing the projects-程序员宅基地

文章浏览阅读2.4w次,点赞10次,收藏27次。1.出错CCS5.5.0导入工程(Import CCS Eclispse Project)时出错:Issues that may require your attention were encountered while importing the projects ,如下图:2.原因是由于文件夹名(例如f28335_Sci_Update_Flash_first)和文件夹中的工程名

Android4.0 Toast显示问题分析_安卓4.0不支持uni.showtoast-程序员宅基地

文章浏览阅读8.9k次,点赞3次,收藏4次。在修复RUI桌面在4.0系统下的提示信息不完善的Bug过程的一些思路与大家分享一下。Bug描述:RUI在2.2的系统点击推荐图标下载后,就会进入下载队列中下载,如果再次点击相同的图标就会使用Toast提示“**已经在下载队列中”。但是在4.0的系统就会出现异常,第二次点击相同的推荐图标时没有出现Toast提示。相关源码:public static void showMe_安卓4.0不支持uni.showtoast