您当前的位置: 首页 >  缓存

MyBatis缓存机制的设计

发布时间:2021-02-03 19:54:17 ,浏览量:0

mybatis 总架构

1 数据缓存设计结构 1.1 一级缓存

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

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

1.2 二级缓存

应用级别的缓存,生命周期长,跟应用的生命周期一样,即作用范围为整个应用。 默认关闭,也不建议使用,一般用Redis第三方来替代。

  • 缓存架构
2 工作机制 2.1 一级缓存的工作机制

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

2.2 二级缓存的工作机制

如果用户配置了cacheEnabled=true,那么在为SqlSession对象创建Executor对象时,会对Executor对象加上一个装饰者CachingExecutor,这时SqlSession使用CachingExecutor对象完成操作请求。

CachingExecutor对查询请求,会先判断该查询请求在Application级别的二级缓存中是否有缓存结果

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

MyBatis二级缓存设计灵活,可以使用:

  • MyBatis自己定义的二级缓存实现
  • 实现org.apache.ibatis.cache.Cache接口自定义缓存
  • 使用第三方内存缓存库,如Memcached
3 使用

MyBatis:

<cache type="org.mybatis.caches.ehcache.LoggingEhcache" > <property name="memoryStoreEvictionPolicy" value="LRU"/>  SqlSession sqlsesion; sqlsession.selectOne(); // 被update,下面语句就会是脏数据 sqlsession.selectOne(); //命中缓存 内存 } 

为什么还这样设计呢?你会写这样写代码的概率很低。


	
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    115984博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0761s