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

转载 2016年05月31日 10:43:35

        本文主要讲解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原理》系列的其中一篇,如果您有兴趣,请关注该系列的其他文章~

   觉得本文不错,顺手点个赞哦~~您的鼓励,是我继续分享知识的强大动力!

   如果您觉得有不妥或者错误的地方,还请您不吝指教!

 



 

-----------------------------------------------------------------------------------------------------------------------------------------

                                                                本文源自  http://blog.csdn.net/luanlouis/,如需转载,请注明出处,谢谢!

本文转载自:http://blog.csdn.net/luanlouis/article/details/41390801

《深入理解mybatis原理(七)》 MyBatis的架构设计以及实例分析

MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,...
  • pfnie
  • pfnie
  • 2016年05月31日 17:29
  • 944

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

目录(?)[+] MyBatis的缓存机制整体设计以及二级缓存的工作模式MyBatis二级缓存的划分使用二级缓存必须要具备的条件一级缓存和二级缓存的使用顺序二级缓存实现的选择MyBatis自身提供的...
  • pfnie
  • pfnie
  • 2016年05月29日 20:37
  • 377

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

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

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

http://blog.csdn.net/luanlouis/article/details/41390801   本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下My...

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

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

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

本文主要讲解MyBatis非常棒的缓存机制的设计原理,给读者们介绍一下MyBatis的缓存机制的轮廓,然后会分别针对缓存机制中的方方面面展开讨论。 MyBatis将数据缓存设计成两级结构,分...
  • AinUser
  • AinUser
  • 2017年03月13日 18:01
  • 119

深入理解mybatis原理(六) MyBatis缓存机制的设计与实现如何细粒度地控制你的MyBatis二级缓存

前几天网友chanfish 给我抛出了一个问题,笼统地讲就是如何能细粒度地控制MyBatis的二级缓存问题,酝酿了几天,觉得可以写个插件来实现这个这一功能。本文就是从问题入手,一步步分析现存的MyBa...

MyBatis缓存机制的设计与实现

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

MyBatis缓存机制原理

mybatis 缓存原理,mybatis缓存机制,mybatis 一级缓存 二级缓存。mybatis理解

我对MyBatis的缓存机制的理解

MyBatis的缓存机制是基于ID进行缓存的,也就是说,MyBatis使用HashMap缓存数据时,是使用对象的ID作为key,而对象作为value保存的。 MyBatis的查询缓存分为一级缓存和二...
  • LYW_lyw
  • LYW_lyw
  • 2017年06月23日 10:37
  • 300
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《深入理解mybatis原理(五)》 MyBatis缓存机制的设计与实现
举报原因:
原因补充:

(最多只允许输入30个字)