MyBatis缓存机制的设计

举报
JavaEdge 发表于 2021/06/04 01:20:53 2021/06/04
【摘要】 1 数据缓存设计结构 1.1 一级缓存 Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,即本地缓存。 一级缓存是MyBatis内部实现的一个特性,用户不能配置,默认自动支持,用户无定制权利。 1.2 二级缓存 Application应用级别的缓存,生命周期长,跟Application的生命周期一样,即作用范围为整个Appli...

1 数据缓存设计结构

1.1 一级缓存

Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,即本地缓存

一级缓存是MyBatis内部实现的一个特性,用户不能配置默认自动支持,用户无定制权利。

1.2 二级缓存

Application应用级别的缓存,生命周期长,跟Application的生命周期一样,即作用范围为整个Application应用。

  • 缓存架构

2 工作机制

2.1 一级缓存的工作机制

一级缓存是Session级别,一般一个SqlSession对象会使用一个Executor对象来完成会话操作,Executor对象会维护一个Cache缓存,以提高查询性能。

2.2 二级缓存的工作机制

一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章

如果用户配置了cacheEnabled=true,那么在为SqlSession对象创建Executor对象时,会对Executor对象加上一个装饰者 CachingExecutor,这时SqlSession使用CachingExecutor对象来完成操作请求
CachingExecutor对于查询请求,会先判断该查询请求在Application级别的二级缓存中是否有缓存结果

  • 如果有查询结果,则直接返回缓存结果
  • 如果缓存未命中,再交给真正的Executor对象来完成查询操作,之后CachingExecutor会将真正Executor返回的查询结果放置到缓存中,然后再返回给用户

MyBatis的二级缓存设计得比较灵活,可以使用MyBatis自己定义的二级缓存实现。也可通过实现org.apache.ibatis.cache.Cache接口自定义缓存
也可以使用第三方内存缓存库,如Memcached等。

使用

MyBatis:

<cache type="org.mybatis.caches.ehcache.LoggingEhcache" > <property name="memoryStoreEvictionPolicy" value="LRU"/></cache> <select id="selectArticleListPage" resultMap="resultUserArticleList" useCache="false">

  
 
  • 1

文章来源: javaedge.blog.csdn.net,作者:JavaEdge.,版权归原作者所有,如需转载,请联系作者。

原文链接:javaedge.blog.csdn.net/article/details/113617108

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。