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

《深入理解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的二级缓存(未完,待续)

原文地址:https://www.cnblogs.com/itxiaok/p/10357803.html

时间: 2024-10-14 20:38:10

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

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

本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存机制中的方方面面展开讨论. MyBatis将数据缓存设计成两级结构,分为一级缓存.二级缓存: 一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存.一级缓存是MyBatis内部实现的一个特性,用户不能配置,默认情况下自动支持的缓存,用户没有定制它的权利(不过这也不是绝对的,可以通过开发插件对它进行修改): 二级缓存是A

Mybatis的一级缓存机制简介

1.接口 public interface MemberMapperCache { public Members selectMembersById(Integer id); } 2.配置文件xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://my

缓存机制总结(JVM内置缓存机制,MyBatis和Hibernate缓存机制,Redis缓存)

一.JVM内置缓存(值存放在JVM缓存中) 我们可以先了解一下Cookie,Session,和Cache Cookie:当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择都纪录下来.当下次你再光临同一个网站,WEB 服务器会先看看有没有它上次留下的 Cookie 资料,有的话,就会依据 Cookie里的内容来判断使用者,送出特定的网页内容给你.具体来说Cookie机制采用的是在客户端保持状态的方案(保存客户浏览器请求服务器页面

一次读懂mybatis中的缓存机制

缓存功能针对于查询(没听说果UPDATE,INSERT语句要缓存什么,都是直接执行的) 默认情况下,mybatis会启用一级缓存. 如果使用同一个session对象调用了相同的SELECT语句,则直接会从缓存中返回结果,而不是再查询一次数据库. 注意:session调用commit或close方法后,这个session中的一级缓存就会被清空 例如: 根据日志输出可以看出,下面代码只会发出一条sql查询语句 SqlSession sqlSession = MyBatisSqlSessionFact

线程安全的缓存机制 - AOP设计与实现

最近几天由于工作原因,需要设计实现一个线程安全的缓存机制,拿出来和大家分享交流一下. 应用背景: 缓存是在实际工作中经常用到的,主要作用呢?1. 提高响应速度 2. 降低cpu压力或者数据库压力. 在此,我的应用背景是拦截一些RFC请求(不要求获取实时数据),以降低数据库及自身应用的访问压力. 目标: 高可扩展性:可以方便配置需要使用缓存的方法. 线程安全性:在并发情况下,要求线程安全,且尽可能高效. 使用技术: 使用AOP的插件性质来降低缓存与原系统的耦合性,即在切面层做缓存的处理. 使用An

《深入理解mybatis原理》 MyBatis的二级缓存的设计原理

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分析MyBatis的二级缓存的设计原理. 1.MyBatis的缓存机制整体设计以及二级缓存的工作模式 如上图所示,当开一个会话时,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章.如果用户配置了"cacheEnabled=true",那么MyBatis在为SqlSession

《深入理解mybatis原理7》 MyBatis的二级缓存的设计原理

<深入理解mybatis原理> MyBatis的二级缓存的设计原理 MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分析MyBatis的二级缓存的设计原理. 1.MyBatis的缓存机制整体设计以及二级缓存的工作模式 如上图所示,当开一个会话时,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章.如果用户配置了"cache

MyBatis的二级缓存的设计原理

MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分析MyBatis的二级缓存的设计原理. 1.MyBatis的缓存机制整体设计以及二级缓存的工作模式 如上图所示,当开一个会话时,一个 SqlSession对象会使用一个 Executor对象来完成会话操作, MyBatis的二级缓存机制的关键就是对这个 Executor对象做文章.如果用户配置了" cacheEnabled=true",那么 MyBatis在为 Sql

深入理解Mybatis原理与技术

目录 第1章 Mybatis简介 1.1 传统的JDBC编程 1.2 ORM模型 1.4 MyBatis 1.5 什么时候用MyBatis 第2章 MyBatis入门 2.2 MyBatis构成 2.3 SqlSession的作用 2.4 映射器 2.4.1 使用XML配置方式 2.4.2 使用注解的方式 2.4.3 MyBatis映射原理 2.5 生命周期 2.5.1 SqlSessionFactoryBuilder 2.5.2 SqlSessionFactory 2.5.3 SqlSessi