1、一级缓存
一级缓存:当在一次数据库会话中,执行多次查询条件完全相同的SQL时,MyBatis提供了一级缓存的方案优化,如果是相同的SQL语句,会优先命中一级缓存,避免直接对数据库进行查询,提高性能。每个SqlSession中持有了Executor,每个Executor中有一个LocalCache。当用户发起查询时,MyBatis根据当前执行的语句生成MappedStatement,在Local Cache进行查询,如果缓存命中的话,直接返回结果给用户,如果缓存没有命中的话,查询数据库,结果写入Local Cache,最后返回结果给用户‘

2、二级缓存
二级缓存:在一级缓存中最大的共享范围就是在一个SqlSession内部,如果需要在多个SqlSession之间共享缓存就需要使用二级缓存。开启二级缓存后,会使用CachingExecutor装饰Executor,进入一级缓存的查询流程前,先在CachingExecutor进行二级缓存的查询

二级缓存开启后,同一个namespace下的所有SQL语句都是共用同一个Cache,即二级缓存被多个SqlSession共享。

当开启缓存后,查询数据会经过二级缓存 -> 一级缓存 -> 数据库。

MyBatis的二级缓存相对于一级缓存来说,实现了SqlSession之间缓存数据的共享,同时粒度更加的细,能够到namespace级别,通过Cache接口实现类不同的组合,对Cache的可控性也更强。

当需要多表查询时,使用MyBatis的二级缓存极大可能会造成脏数据。因为MyBatis的二级缓存是基于namespace的,且每次update缓存都会被更新,当其他namespace中有语句对所在表进行修改时,多表查询语句所在的namspace无法感应到这些修改,就会造成脏数据。

在分布式环境下,由于默认的MyBatis Cache实现都是基于本地的,分布式环境下必然会出现读取到脏数据,需要使用集中式缓存将MyBatis的Cache接口实现,有一定的开发成本,直接使用Redis、Memcached等分布式缓存可能成本更低,安全性也更高。

MyBatis 缓存原理梳理相关推荐

  1. Mybatis——缓存原理和分析

    摘要 主要是分析的一下Mybatis的一级缓存和二级缓存的原理和源码的操作.每一次在和数据库进行会话的过程中,MyBatis 都会创建一个SqlSession对象.同一次会话期间,只要是查询过的数据, ...

  2. mybatis缓存原理

    缓存概述 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持: 一级缓存基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 ...

  3. MyBatis 缓存原理解析

    为什么 MyBatis 要缓存 缓存在互联网系统中是非常重要的, 其主要作用是将数据保存到内存中, 当用户查询数据时, 优先从缓存容器中获取数据,而不是频繁地从数据库中查询数据,从而提高查询性能.而在 ...

  4. MyBatis缓存技术(一级缓存、二级缓存)

    MyBatis缓存技术(一级缓存.二级缓存) MyBatis的缓存分类 一级缓存 一级缓存的作用域是一个SqlSession.MyBatis默认开启一级缓存.在同一个SqlSession中,执行相同的 ...

  5. MyBatis 源码分析 - 缓存原理

    1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请求,减轻数据库压力.作为一个重要的组件,MyBatis 自然 ...

  6. 【MyBatis框架】查询缓存-二级缓存原理

    二级缓存原理 1.原理 首先看图 首先开启mybatis的二级缓存. sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到二级缓存中. 如果SqlSession3去执行 ...

  7. 【MyBatis框架】查询缓存-一级缓存原理

    查询缓存 1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 缓存模式图如图 一级缓存是SqlSession级别的缓存.在操作 ...

  8. 五分钟,带你彻底掌握 MyBatis缓存 工作原理

    作者:双子孤狼 blog.csdn.net/zwx900102/article/details/108696005 前言 在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的 ...

  9. 给我五分钟,带你彻底掌握 MyBatis 缓存的工作原理

    前言 在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的缓存,各种中间件如Redis也是用来充当缓存的作用,编程语言中又可以利用内存来作为缓存.自然的,作为一款优秀的ORM ...

  10. Mybatis执行流程、缓存原理以及相关面试题

    一.Mybatis执行流程 具体分析Mybatis是如何操作数据库的! . 1.定义我们的核心配置文件的路径,这个路径是从target/classes下开始找的! String config = &q ...

最新文章

  1. 如何根据keras的fit后返回的history绘制loss acc曲线
  2. 微型计算机性能指标中可靠性是指连续,计算机接口原理定义
  3. 【模板】匈牙利算法 二分图最大匹配题模板
  4. 使用ABAP代码返回S/4HANA Material上维护的Attachment明细
  5. dns服务 很多问题,后续再研究
  6. mongodb的更新语句
  7. js,同意后,才可已点击注册按钮
  8. Oracle_JOB参数详解
  9. python框架之Flask(4)-上下文管理
  10. 阿里云天池大赛——机器学习篇赛题解析(赛题一)上
  11. python截取视频制作gif表情包
  12. Redis解决高并发问题
  13. 美团饿了吗CPS红包,别人领红包下单,你拿推广佣金(附源码)
  14. react native 背景颜色渐变
  15. 基于javaEE的超市库存管理系统
  16. 成长的路上总会有那么一群人
  17. 计算机视觉 python 解图片数独题
  18. java语言笔记io
  19. 服务器虚拟主机玩魔域,服务器虚拟主机玩魔域
  20. SQLServer分组数据

热门文章

  1. kali linux电脑配置要求,Kali Linux下配置PM3运行环境
  2. 高压输电线路线夹温度监测系统装置
  3. 使用plsql登陆oracle数据库,使用PLSQL 创建Oracle数据库用户
  4. HikariCP 了解一下
  5. 华为光猫虚拟服务器怎么设置,华为路由器连接光猫怎么设置
  6. 软件库App源码+后端源码
  7. 人月神话札记:画蛇添足
  8. BurpSuite+Proxifer 抓取PC客户端HTTP数据包
  9. SecureCrt中文破解版直接下载使用免破解免安装并解决中文乱码问题
  10. sublime 配置快捷键