《深入理解mybatis原理4》mybatis缓存机制的设计与实现

     2022-04-28     595

关键词:

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

本文主要讲解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的二级缓存(未完,待续)





《深入理解mybatis原理6》mybatis的一级缓存实现详解及使用注意事项

《深入理解mybatis原理》MyBatis的一级缓存实现详解及使用注意事项0.写在前面 MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上。MyBatis提供了一级缓存、二级缓存这两个缓存机制,... 查看详情

深入理解mybatis原理与技术

目录第1章Mybatis简介1.1传统的JDBC编程1.2ORM模型1.4MyBatis1.5什么时候用MyBatis第2章MyBatis入门2.2MyBatis构成2.3SqlSession的作用2.4映射器2.4.1使用XML配置方式2.4.2使用注解的方式2.4.3MyBatis映射原理2.5生命周期2.5.1SqlSessionFactoryBuilder2.5.2SqlSession... 查看详情

深入理解mybatis的原理:配置文件用法(续)

前言:前文讲解了MyBatis的配置文件一部分用法,本文将继续讲解MyBatis的配置文件的用法。目录1、typeHandler类型处理器2、ObjectFactory3、插件4、environments配置环境5、databaseIdProvider数据库厂商标识6、引入映射器的方法1、typeHandler类... 查看详情

《深入理解mybatis原理1》mybatis的架构设计以及实例分析

 《深入理解mybatis原理》MyBatis的架构设计以及实例分析MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个sele... 查看详情

《深入理解mybatis原理3》mybatis数据源与连接池

《深入理解mybatis原理》Mybatis数据源与连接池对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题。本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池。本文... 查看详情

《深入理解mybatis原理2》mybatis初始化机制详解

《深入理解mybatis原理》Mybatis初始化机制详解对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外。本章将通过以下几点详细介绍MyBatis的初始化过程。1.MyBatis的初始化做了什么?2.MyBatis基于XML配置文件创建Configu... 查看详情

深入理解mybatis的原理:配置文件上

前言:前文提到一个入门的demo,从这里开始,会了解深入MyBatis的配置,本文讲解MyBatis的配置文件的用法。目录1、properties元素2、设置(settings)3、别名(typeAliases)配置XML文件的层次结构 <?xmlversion="1.0"encoding="UTF-8"?><... 查看详情

mybatis缓存--------系统缓存及简单配置介绍

...及Mybatis的相关配置以及生命周期等。主要参考资料:《深入浅出Mybatis基础原理与实战》,http://www.mybatis.org/mybatis-3/z 查看详情

mybatis深入理解-----mybatis数据源与连接池(代码片段)

...将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池。本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的。紧接着将分类介绍UNPOOLED、POOLED和JNDI类型的数据源组织;期间我们... 查看详情

深入浅出mybatis的一级二级缓存机制(代码片段)

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、MyBatis缓存缓存就是内存中的数据,常常来自对数据库查询结果的保存... 查看详情

深入浅出mybatis的一级二级缓存机制(代码片段)

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、MyBatis缓存缓存就是内存中的数据,常常来自对数据库查询结果的保存... 查看详情

深入浅出mybatis:mybatis解析和运行原理

上一篇介绍了反射和动态代理基础,主要是为本篇文章做个铺垫,反射使配置和灵活性大大提高,可以给很多配置设置参数,动态代理可以在运行时创建代理对象,做一些特殊的处理。本篇会介绍MyBatis解析和运行原理,下一篇... 查看详情

深入浅出mybatis:jdbc和mybatis介绍

...陪产假,时间比较零碎,准备看2本书充实下,一本是「深入浅出MyBatis:技术原理与实践」,一本是「RabbitMQ实战:高效部署分布式消息队列」,为了加深记忆和理解,会进行整理、扩展和记录。看书的目标不是把所有的细节都... 查看详情

mybatis缓存理解

缓存接触过hibernate的同学都知道hibernate中有个二级缓存,mybatis也存在二级缓存。mybatis中二级缓存有什么作用呢?mybatis提供查询缓存,可以提高查询效率,减轻数据库的压力。一级缓存一级缓存是session级别的缓存,基于PerpetualCa... 查看详情

深入浅出mybatis:反射和动态代理

前三篇详细总结了Mybatis的基本特性、常用配置、映射器,相对于Hibernate,映射器的配置相对复杂,但有很好的灵活性和扩展性,可以应对各种业务场景。熟练掌握这些内容,可以流畅的使用MyBatis进行开发了。后面准备介绍MyBatis... 查看详情

mybatis的原理配置使用高级映射和代理机制和缓存机制(代码片段)

文章目录一、MyBatis介绍二、MyBatis原理三、MyBatis的配置1、配置全局配置文件2、XML配置1、Properties2、setting3、typeAliases(类型别名)4、Mappers3、标签详解1、select标签2、insert标签3、update标签4、delete标签四、MyBatis的使用1、My... 查看详情

mybatis深入理解-----mybatis事务管理机制(代码片段)

MyBatis作为Java语言的数据库框架,对数据库的事务管理是其非常重要的一个方面。本文将讲述MyBatis的事务管理的实现机制。首先介绍MyBatis的事务Transaction的接口设计以及其不同实现JdbcTransaction和ManagedTransaction;接着,从MyBatis的XM... 查看详情

深入理解mybatis插件开发

...内部实现机制,涉及的软件设计模式,编程思想往往没有深入的理解。本篇案例将帮助读者对Mybatis插件的使用场景,实现机制,以及其中涉及的编程思想进行一个小结,希望对以后的编程开发工作有所帮助。注:本案 查看详情