MyBatis 缓存原理梳理
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 缓存原理梳理相关推荐
- Mybatis——缓存原理和分析
摘要 主要是分析的一下Mybatis的一级缓存和二级缓存的原理和源码的操作.每一次在和数据库进行会话的过程中,MyBatis 都会创建一个SqlSession对象.同一次会话期间,只要是查询过的数据, ...
- mybatis缓存原理
缓存概述 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持: 一级缓存基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 ...
- MyBatis 缓存原理解析
为什么 MyBatis 要缓存 缓存在互联网系统中是非常重要的, 其主要作用是将数据保存到内存中, 当用户查询数据时, 优先从缓存容器中获取数据,而不是频繁地从数据库中查询数据,从而提高查询性能.而在 ...
- MyBatis缓存技术(一级缓存、二级缓存)
MyBatis缓存技术(一级缓存.二级缓存) MyBatis的缓存分类 一级缓存 一级缓存的作用域是一个SqlSession.MyBatis默认开启一级缓存.在同一个SqlSession中,执行相同的 ...
- MyBatis 源码分析 - 缓存原理
1.简介 在 Web 应用中,缓存是必不可少的组件.通常我们都会用 Redis 或 memcached 等缓存中间件,拦截大量奔向数据库的请求,减轻数据库压力.作为一个重要的组件,MyBatis 自然 ...
- 【MyBatis框架】查询缓存-二级缓存原理
二级缓存原理 1.原理 首先看图 首先开启mybatis的二级缓存. sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到二级缓存中. 如果SqlSession3去执行 ...
- 【MyBatis框架】查询缓存-一级缓存原理
查询缓存 1.什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 缓存模式图如图 一级缓存是SqlSession级别的缓存.在操作 ...
- 五分钟,带你彻底掌握 MyBatis缓存 工作原理
作者:双子孤狼 blog.csdn.net/zwx900102/article/details/108696005 前言 在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的 ...
- 给我五分钟,带你彻底掌握 MyBatis 缓存的工作原理
前言 在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的缓存,各种中间件如Redis也是用来充当缓存的作用,编程语言中又可以利用内存来作为缓存.自然的,作为一款优秀的ORM ...
- Mybatis执行流程、缓存原理以及相关面试题
一.Mybatis执行流程 具体分析Mybatis是如何操作数据库的! . 1.定义我们的核心配置文件的路径,这个路径是从target/classes下开始找的! String config = &q ...
最新文章
- 如何根据keras的fit后返回的history绘制loss acc曲线
- 微型计算机性能指标中可靠性是指连续,计算机接口原理定义
- 【模板】匈牙利算法 二分图最大匹配题模板
- 使用ABAP代码返回S/4HANA Material上维护的Attachment明细
- dns服务 很多问题,后续再研究
- mongodb的更新语句
- js,同意后,才可已点击注册按钮
- Oracle_JOB参数详解
- python框架之Flask(4)-上下文管理
- 阿里云天池大赛——机器学习篇赛题解析(赛题一)上
- python截取视频制作gif表情包
- Redis解决高并发问题
- 美团饿了吗CPS红包,别人领红包下单,你拿推广佣金(附源码)
- react native 背景颜色渐变
- 基于javaEE的超市库存管理系统
- 成长的路上总会有那么一群人
- 计算机视觉 python 解图片数独题
- java语言笔记io
- 服务器虚拟主机玩魔域,服务器虚拟主机玩魔域
- SQLServer分组数据