• 一级缓存默认是开启的(但是整合了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做缓存

Mybatis二级缓存的缺陷相关推荐

  1. 深入了解MyBatis二级缓存

    深入了解MyBatis二级缓存 一.创建Cache的完整过程 我们从SqlSessionFactoryBuilder解析mybatis-config.xml配置文件开始: Reader reader ...

  2. Mybatis二级缓存原理

    记录是一种精神,是加深理解最好的方式之一. 最近看了下Mybatis的源码,分析了二级缓存的实现方式,在这里把他记下来.虽然这不复杂,对这方面的博客也有很多,写的也很好.但我坚信看懂了是其一,能够教别 ...

  3. MyBatis复习(六):MyBatis二级缓存

    Mybatis缓存分为一级缓存和二级缓存 MyBatis一级缓存是默认开启的,数据存储范围是SqlSession会话这个级别,当SqlSession关闭后,缓存就会被清除,生命周期非常短. MyBat ...

  4. Mybatis一级缓存、整合第三方缓存ehcache、Mybatis二级缓存

    8. 缓存 8.1 一级缓存 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库,而我们在极短的时间内做了完全相同的查询,那么它们的 ...

  5. Mybatis 二级缓存简单示例

    简介 简单接收Mybatis中二级缓存的使用示例 概览 主要部分如下: 引入Maven依赖 SpringBoot配置文件配置.建库与初始化SQL语句 实体类与Mapper编写 测试 Maven依赖 完 ...

  6. SpringBoot整合Redis配置MyBatis二级缓存

    目录 写在前面 源码获取 一.MyBatis缓存机制 1.1.一级缓存 1.2.二级缓存 二.集成Redis 2.1.安装Redis 2.2.项目引入Redis 2.2.1.Maven依赖 2.2.2 ...

  7. mybatis二级缓存

    mybatis二级缓存 Mybatis中一级缓存 和 二级缓存的区别 一级缓存(本地缓存) 二级缓存(全局缓存) 二级缓存开启 mybatis解读 总结 Mybatis中一级缓存 和 二级缓存的区别 ...

  8. MyBatis研习录(13)——MyBatis二级缓存

    C语言自学完备手册(33篇) Android多分辨率适配框架 JavaWeb核心技术系列教程 HTML5前端开发实战系列教程 MySQL数据库实操教程(35篇图文版) 推翻自己和过往--自定义View ...

  9. Mybatis 一级缓存,Mybatis 二级缓存,Mybatis 缓存失效

    Mybatis 一级缓存,Mybatis 二级缓存,Mybatis 缓存失效 ================================ ©Copyright 蕃薯耀 2021-06-24 ht ...

最新文章

  1. SQL Server 2000查询n到m条记录
  2. oracle job 与存储过程,应用oracle job和存储过程
  3. python rarfile不支持unicode_python – zipfile提取时的unicode错误
  4. Exact-k:组合推荐的秘密
  5. mysql常用调试工具_最常用的8款PHP调试工具
  6. css transition transform animation例子讲解
  7. ERP基础知识100问题,值得收藏
  8. 【AR优秀开源项目】ARCore项目工程汇总
  9. Linux(九、十)文件权限及网络配置管理
  10. 初创公司几个投资人,各占多少股份合适?
  11. 编辑chm格式的文档
  12. Olly Advanced 1.27
  13. 【转发】Cortex-M3 处理器
  14. Android系统版本(截止2022年2月)
  15. 操作系统实验七 地址映射与共享(哈工大李治军)
  16. 化工设计常用的三维软件有哪些?SmartPlant 3D、PDMS、SolidWorks......
  17. html中波浪线线怎么设置,如何在PPT中加波浪线?
  18. 扫雷计算机教案,四年级上信息技术教案-游戏——扫雷辽师大版
  19. MySql安装学习记录
  20. 商汤已通过港交所IPO聆讯,占市场份额11%,募资10亿美元

热门文章

  1. 团队任务管理该怎么做才高效?管理者应该学会这些
  2. 也谈多操作系统并存(Win98和WinMe)
  3. C语言中结构体struct的用法总结
  4. php商城系统文和答题_ThinkPHP5实现答题管理系统(一)
  5. 关于前端大佬:尤雨溪
  6. 谈Flash的破解与加密(附flash破解工具)
  7. android音视频开发!写给安卓软件工程师的3条建议,已整理成文档
  8. Mellanox驱动加载与RoCE soft-RoCE(RDMA)
  9. 基于内容的电影推荐:物品画像
  10. windows系统 kettle 下载、安装