Mybatis 一级缓存和二级缓存

柔光的暖阳◎ 2022-09-12 07:58 451阅读 0赞

文章目录

    • 前言
    • 一级缓存
    • 二级缓存
    • Mybatis内部实现的Cache
    • 参考

前言

MyBatis是常见的Java数据库访问层框架。

在日常工作中,开发人员多数情况下是使用MyBatis的默认缓存配置,但是MyBatis缓存机制有一些不足之处,在使用中容易引起脏数据,形成一些潜在的隐患,所以更多的会集成第三方Cache,例如Ehrcache等。

一级缓存

Mybatis的一级缓存不需要任何配置,在每一个 SqlSession 当中都有一个一级缓存区,作用范围是 SqlSession 。

简单来讲,如果同一个数据库会话,连续执行了完全相同的查询操作,那么缓存将大大提高效率。
在这里插入图片描述
每个SqlSession中持有了Executor,每个Executor中有一个LocalCache。当用户发起查询时,MyBatis根据当前执行的语句生成MappedStatement,在Local Cache进行查询,如果缓存命中的话,直接返回结果给用户,如果缓存没有命中的话,查询数据库,结果写入Local Cache

二级缓存

Mybatis 的二级缓存需要手动开启才能启动,与一级缓存的最大区别就在于二级缓存的作用范围比一级缓存大,二级缓存是多个 sqlSession 可以共享一个 Mapper 的二级缓存区域。

二级缓存作用的范围是 Mapper 中的同一个命名空间(namespace)的 statement 。在配置文件默认开启了二级缓存的情况下,如果每一个 namespace 都开启了二级缓存,则都对应有一个二级缓存区,同一个 namespace 共用一个二级缓存区。

在这里插入图片描述
当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。

Mybatis内部实现的Cache

在这里插入图片描述
这些mybatis实现的缓存,都实现了cache接口
在这里插入图片描述

参考

https://blog.csdn.net/qq_24598601/article/details/83046468

发表评论

表情:
评论列表 (有 0 条评论,451人围观)

还没有评论,来说两句吧...

相关阅读