本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存机制中的方方面面展开讨论。

MyBatis将数据缓存设计成两级结构,分为一级缓存、二级缓存:

一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存。一级缓存是MyBatis内部实现的一个特性,用户不能配置,默认情况下自动支持的缓存,用户没有定制它的权利(不过这也不是绝对的,可以通过开发插件对它进行修改);

二级缓存是Application应用级别的缓存,它的是生命周期很长,跟Application的声明周期一样,也就是说它的作用范围是整个Application应用。

MyBatis中一级缓存和二级缓存的组织如下图所示:

一级缓存的工作机制:

一级缓存是Session会话级别的,一般而言,一个SqlSession对象会使用一个Executor对象来完成会话操作,Executor对象会维护一个Cache缓存,以提高查询性能。关于一级缓存的详细实现,我已经在《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项 一文中有非常详尽的讨论,读者可以前去了解。

二级缓存的工作机制:

如上所言,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章。如果用户配置了"cacheEnabled=true",那么MyBatis在为SqlSession对象创建Executor对象时,会对Executor对象加上一个装饰者:CachingExecutor,这时SqlSession使用CachingExecutor对象来完成操作请求。CachingExecutor对于查询请求,会先判断该查询请求在Application级别的二级缓存中是否有缓存结果,如果有查询结果,则直接返回缓存结果;如果缓存中没有,再交给真正的Executor对象来完成查询操作,之后CachingExecutor会将真正Executor返回的查询结果放置到缓存中,然后在返回给用户。

MyBatis的二级缓存设计得比较灵活,你可以使用MyBatis自己定义的二级缓存实现;你也可以通过实现org.apache.ibatis.cache.Cache接口自定义缓存;也可以使用第三方内存缓存库,如Memcached等,这个我们会在后续的文章中详细讨论。

由于缓存机制东西太多,所以将缓存机制的叙述拆成一下几部分(读者可点击查看):

1. MyBatis的一级缓存实现详解 及使用注意事项
2. MyBatis的二级缓存的设计原理

3. 自定义二级缓存(未完,待续)

4. 使用第三方内存库作为MyBatis的二级缓存(未完,待续)
--------------------- 
作者:亦山 
来源:CSDN 
原文:https://blog.csdn.net/luanlouis/article/details/41390801 
版权声明:本文为博主原创文章,转载请附上博文链接!

《深入理解mybatis原理》 MyBatis缓存机制的设计与实现相关推荐

  1. 理解DataSet的数据缓存机制

    虽然在以前的开发中经常使用DataSet类,但是重来没有涉及到数据缓存机制这块内容.今天看了一下,也算是做点总结. 在理解数据缓存机制之前需要理解DataRow的两个概念,即行状态和行版本.行状态就是 ...

  2. mybatis 原理_深入理解MyBatis原理 MyBatis数据源与连接池

    点击上方"程序开发者社区"关注,选择"设为星标" 第一时间送达实用干货 对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文 ...

  3. 聊聊Mybatis里面的缓存机制吧

    Mybatis 提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能. Mybatis的缓存分为:一级缓存和二级缓存 一级缓存 当我们使用MyBatis开启一次和数据库的会话,MyBati ...

  4. MyBatis 一二级的缓存机制详解

    为什么要用缓存? MyBatis 的缓存 Mybatis的一级缓存和二级缓存执行顺序 一级缓存工作原理: 操作过程: 总结 二级缓存实现原理 图解: cache属性的简介: 操作过程: 禁用二级缓存: ...

  5. mysql 源码 缓存_MySQL源码:MYSQL存储过程/函数的分析原理及缓存机制

    前言:我个人认为,有关MYSQL存储过程/函数在MYSQL中的实现比较粗糙,可扩展性不够好,其实现的耦合性太高,所以主要讲一些它的原理方面的内容,但有可能在某些方面理解不够好或者有些不正确的地方,欢迎 ...

  6. 彻底理解浏览器的Http缓存机制

    概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,HTTP报文分为两种:HTTP请求 ...

  7. java生成一维码和二维码,mybatis原理和实现机制

    } } return image; } /** 将字符串编成一维条码的矩阵 @param str @param width @param height @return */ public static ...

  8. java中mybatis原理,mybatis的工作原理

    由以上图可以看出,mybatis框架在操作数据库时大致经过了8个步骤.对这8个步骤分析如下: 1)读取mybatis配置文件mybatis-config.xml.mybatis-config.xml配 ...

  9. MyBatis缓存机制之一级缓存

    MyBatis缓存机制之一级缓存 前言 MyBatis内部封装了JDBC,简化了加载驱动.创建连接.创建statement等繁杂的过程,是我们常见的持久性框架.缓存是在计算机内存中保存的临时数据,读取 ...

最新文章

  1. Python学习笔记3——三大结构:顺序,分支,循环3
  2. HTML+CSS布局技巧及兼容问题【阅读季】
  3. ES6 let和const 命令
  4. 零基础小白如何学习好UI设计
  5. apache httpclient 工具类_Java教程分享使用HttpClient抓取页面内容
  6. Fiddler保存http请求 常用sprirct
  7. linux下 zip解压 tar解压 gz解压 bz2等各种解压文件命令
  8. Maven报错Missing artifact jdk.tools:jdk.tools:jar:1.7--转
  9. 【杂记】2020年度中国医院排行榜
  10. Android Studio Problems
  11. SQLCE 3.5 部署打包
  12. linux文件描述符有什么用,linux上的文件描述符3有什么特别之处?
  13. 使用aliyun镜像源下载镜像及仓库搭建
  14. MongoDB学习笔记~官方驱动的原生Curd操作
  15. C盘爆满给Android Studio瘦身将sdk移除C盘
  16. 开发老铁们,就参考这个图灵畅销新书书单加购!
  17. java j2se下载_安装JDK(J2SE)
  18. 三角形内切圆 / 外接圆半径计算公式及证明总结 ~
  19. Linux下的数学工具Maxima 简明教程(上)
  20. Android开发 mobi格式,Android MobIM的免费使用方法

热门文章

  1. Spring Security Java Config Preview--官方
  2. Spring Remoting: Hessian--转
  3. LESSON 3 线性回归的手动实现
  4. 短视频未来3年的规模为3万亿元
  5. 能做存储的超级计算机——任宇翔和以色列团队的创业故事
  6. 布道微服务_06微服务调用的监控
  7. Java开发规范01 - 集合篇_Arrays.asList 坑
  8. Apache ZooKeeper - 使用ZK实现分布式锁(非公平锁/公平锁/共享锁 )
  9. Apache ZooKeeper - 使用原生的API操作ZK_ACL权限
  10. [并发编程] - Executor框架#ThreadPoolExecutor源码解读03