小伙伴们都知道mybatis吧,那你们知道它的缓存工作原理是什么吗?今天我们要讲的就是mybatis的缓存机制原理,快跟小编来了解了解吧。
MyBatis缓存
一、缓存概念
缓存就是把用户经常查询的数据的结果集的保存到一个内存中的操作,这样,在用户进行查询时就不会使用数据库文件查询,这样就减少了与数据库的交互次数,能够极大的提高响应速度,从而来解决并发系统的性能问题。
二、什么是会话
会话就是用户与系统的一次完整的交流,在一次交流过程中会包含多次请求响应,然发送的请求都只是同一个用户,SqlSession就是用户与数据库进行一次会话过程中使用的接口。
三、MyBatis缓存分类
一级缓存:
也被叫做本地缓存,适用于保存用户在某次会话过程中查询的结果,用户在一次会话中只能使用一个sqlSession,一级缓存都是自动开启的,不允许关闭。
在程序应用运行过程里,执行一次数据库会话中,我们如果执行多次查询条件完全相同的SQL,它就会优先命中一级缓存,避免了直接对数据库进行查询。
Mybatis中所有SqlSession中都持有着Excutor,在每个Excutor中都会有一个LocalCache。每当一个用户发起询问时,MyBatis会根据当前执行的语句生成MappedStatement,并在Local Cache进行查询,如若缓存命中,就会直接返回结果给用户,如果缓存没有命中的话,就查询数据库,结果写入Local Cache中,最后返回结果给用户。
二级缓存:
也被叫做全局缓存,它是mapper级别的缓存,是针对一个表的查结果的存储,二级缓存可以共享给所有针对这张表的查询的用户。就是说对于mapper级别的缓存不同的sqlsession是可以共享的。
Mybatis在启动二级缓存后,会使用CachingExecutor装饰Executor,在它进入一级缓存的查询流程前,会先在CachingExecutor进行二级缓存的查询,具体工作流程如下:
当二级缓存被开启后,在同一个namespace下的所有操作语句,都会影响着同一个Cache,即二级缓存被多个SqlSession共享,它是一个全局的变量。当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。
以上就是关于mybatis缓存机制工作原理的全部内容了,如若需要了解更多mybatis常见问题就请持续关注奇Q工具网吧。
推荐阅读: