《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
来源:互联网 发布:mac怎么删除桌面文件 编辑:程序博客网 时间:2024/06/05 07:53
转载:http://blog.csdn.net/luanlouis/article/details/41390801
本文主要讲解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的二级缓存的设计原理
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理(五)》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 深入理解mybatis原理(五) MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- SSM 之《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- 《深入理解mybatis原理(六)》 MyBatis缓存机制的设计与实现如何细粒度地控制你的MyBatis二级缓存
- 深入理解mybatis原理(六) MyBatis缓存机制的设计与实现如何细粒度地控制你的MyBatis二级缓存
- 《深入理解mybatis原理(六)》 MyBatis缓存机制的设计与实现如何细粒度地控制你的MyBatis二级缓存
- MyBatis缓存机制的设计与实现
- 深入理解MyBatis(六)—MyBatis的缓存机制
- 编写Java程序使用XSD校验XML文档
- CSS3选择器(全)
- 【Linux学习】 Redis常用的一些指令
- 第一篇:概述 -- 1.大型网站架构演化笔记
- 视频 | BIM数据中心模型
- 《深入理解mybatis原理》 MyBatis缓存机制的设计与实现
- VIP的漂移
- 大型分布式网站架构设计与实践 第一章
- 快速排序算法的实现
- IDEA 配置 Tomcat与Struts2时报错
- ip地址(noj1020)//gets函数在scanf函数后容易出现的错误
- Java中List转换为数组,数组转List
- 第一次使用hibernate
- 生鲜超市电商启示录:多点Dmall、盒马鲜生…他们凭什么能生存下去?