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

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

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

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

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

相关阅读    
  • 《深入理解mybatis原理》mybatis缓存机制的
  • hibernate和mybatis思想,区别,优缺点
  • mybatis缓存和hibernate缓存的理解问题和区
  • mybatis与ibatis的区别
  • mybatis的拦截器interceptor源代码解析
  • mybatis和ibatis区别
  • MyBatis树形结构查询
  • hibernate与mybatis 的比较
  • 深入理解Redis主键失效原理及实现机制(2)
  • php cache缓存机制与文件缓存原理
  • Mybatis Interceptor 拦截器原理 源码分析
  •  

     收录时间:2016-11-27 01:37 来源:谢谢  作者:的话
    上一篇:my2n-j my2nj_中间继电器_dc24v继电器  (电脑版  手机版)
    Copyright by www.chinabaike.com;All rights reserved. 联系我们