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

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

大家好,又见面了,我是你们的朋友全栈君。

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

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

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

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

  

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

《深入理解mybatis原理》 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等,这个我们会在后续的文章中详细讨论。

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

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

1. MyBatis的一级缓存实现详解 及使用注意事项

2. MyBatis的二级缓存的设计原理

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

4. 使用第三方内存库作为MyBatis的二级缓存(未完,待续)

作者的话

    本文是《深入理解mybatis原理》系列的其中一篇,如果您有兴趣,请关注该系列的其他文章~

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

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

 

 

—————————————————————————————————————————————–

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143156.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ts文件怎么合并转换成mp4?

    ts文件怎么合并转换成mp4?ts文件怎么合并转换成mp4?现在小编就来教大家一个方法吧,直接将多个ts视频文件直接合并成mp4格式,大家想不想学会这个技能呢?跟我一起往下看吧。

    2025年7月4日
    0
  • SparkIV「建议收藏」

    SparkIV「建议收藏」SparkIVSparkIV是知名游戏GTA4的一款游戏资源读取/导入/导出/编辑/修改的修改软件。很多玩家使用SparkIV为GTA4安装车辆MOD,人物MOD,武器MOD等。不过Spar

    2022年8月5日
    13
  • Java之AES/ECB/PKCS7Padding加密方式

    Java之AES/ECB/PKCS7Padding加密方式更安全的加密。

    2025年6月13日
    0
  • Origin2018安装与使用(整理中)

    Origin2018安装与使用(整理中)文章目录1.origin下载安装2.绘图前的一些必要设置3.折线图4.绘制双Y轴图1.origin下载安装Origin2018(32/64位)下载地址:链接:https://pan.baidu.com/s/1tgLxqeLoBp5DuL-hqlUDsg密码:v46x安装教程:https://jingyan.baidu.com/article/454316abde29f5f7a6c03a69.html2.绘图前的一些必要设置Origin绘图前的一些必要设置及了解1.项目管理器、对象

    2022年6月12日
    67
  • 腾讯重磅开源 DCache,分布式 NoSQL 存储系统

    腾讯重磅开源 DCache,分布式 NoSQL 存储系统开发四年只会写业务代码,分布式高并发都不会还做程序员?->>>受访嘉宾:山宝银|作者:h4cd当你在电商平台秒杀商品或者在社交网络刷热门话题的时候,可以很明显感受到当前网络数据流量的恐怖,几十万商品刚开抢,一秒都不到就售罄;哪个大明星出轨的消息一出现,瞬间阅读与转发次数可以达到上亿。作为终端用户的我们可能会思考,服务系统是怎么在这样严峻的流量环境中存活下来的。…

    2022年10月21日
    0
  • UIImageView圆角

    UIImageView圆角

    2021年8月18日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号