mybatis缓存

mybatis缓存理解

前几天在面试中被问到了mybatis的缓存问题。当时才突然发现已经忘得差不多了。然后又查资料,看文档,再从大脑中将其唤醒。首先得明确一点,mybatis有两级缓存。分为一级缓存和二级缓存。要说mybatis缓存,还得从mybatis的基本结构说起。

                                image.png

以上是mybatis的基本结构, 

一级缓存是Session会话级别的,一般而言,一个SqlSession对象会使用一个Executor对象来完成会话操作,Executor对象会维护一个Cache缓存,以提高查询性能。假如说mybatis只使用了一级缓存,那么他们的原理应该是这个样子的。

                image.png

二级缓存机制的关键就是对这个Executor对象做文章。如果用户配置了"cacheEnabled=true",那么MyBatis在为SqlSession对象创建Executor对象时,会对Executor对象加上一个装饰者:CachingExecutor,这时SqlSession使用CachingExecutor对象来完成操作请求。CachingExecutor对于查询请求,会先判断该查询请求在Application级别的二级缓存中是否有缓存结果,如果有查询结果,则直接返回缓存结果;如果缓存中没有,再交给真正的Executor对象来完成查询操作,之后CachingExecutor会将真正Executor返回的查询结果放置到缓存中,然后在返回给用户。MyBatis的二级缓存设计得比较灵活,你可以使用MyBatis自己定义的二级缓存实现;你也可以通过实现org.apache.ibatis.cache.Cache接口自定义缓存;也可以使用第三方内存缓存库,如Memcached等。

                    image.png

缓存的使用,可以使得我们操作数据库的次数大大减少。也就避免了对系统资源的浪费。因此,合理的使用缓存会使得系统的性能优化。本文只是对mybatis缓存原理的介绍。因此mybatis缓存的图可以画成这个样子。

                    image.png





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章