各位小伙伴
我们今天来分享的是
mybatis 的缓存
缓存小伙伴们应该都有了解一点儿吧!就是我们看电影的时候,有时候就会弹出一句,"网速不好,缓存一下再看".或者就是"进度君在玩命的加载中...".大致就是这些了,那么今天我们就来一起了解一下mybatis框架的缓存.
Mybatis 缓存
缓存的概念
当用户频繁查询某些固定的数据时,第一次将这些数据从数据库中查询出来,保存在缓存(内存,高速磁盘)中.当下次用户再次查询这些数据时,不用再通过数据库查询,而是去缓存里面查询.
减少网络连接和数据库查询带来的损耗,从而提高我们的查询效率,减少高并发访问带来的系统性能问题.
MyBatis 的缓存分为一级缓存和二级缓存
如图所示:
Mybatis 的一级缓存是只在同一个 sqlSession 里面应用 Mybatis 的二级缓存可以跨越 sqlSession ,以 mapper 为单位创建,是系统级缓存.
一级缓存
如图所示:
当第一次发出 sql 请求的时候, Mybatis 会从数据库查询,并将结果存入一级缓存中.当在同一个 sqlSession 里面发出同样的 sql 查询请求, Mybatis 会直接从缓存中查找.如果没有,则从数据库查找.
注意:
MyBatis 默认支持一级缓存,不需要另外配置,但是在跟 spring 整合的时候,进行 mapper 代理开发的方式时,mybatis 的一级缓存是不存在的 ,因为代理模板每次调用完之后都会关闭sqlSession.
如果 sqlSession 里面出现 commit 操作, sqlSession 中的缓存会被全部清空,避免出现脏读.
二级缓存
a:Mybatis 的二级缓存是 mapper 级别的,就是说二级缓存是以 Mapper 配置文件的namespace 为单位创建的.
b:Mybatis 的二级缓存需要在 settting 里面加入配置(默认是开启的)
c:需要在 mapper 映射文件加入标签才可以触发此映射文件开启二级缓存.
d:在映射文件用到的查询对象必须序列化 User.java
e:如果需要禁用某个 statment 的缓存 ,可以在这个 statement 里面单独设置 ,比如我们的用户名和密码不需要缓存.
好的,我们的二级缓存设置完成了,现在来测试一下.我们把 sqlsession 关闭了.这样就是不用一级缓存了.
我们现在看见的就是二级缓存的效果了
二级缓存的相关配置
eviction: 缓存的回收策略 默认为LRU
LRU:移除近期最少使用的对象
FIFO: FIRST INPUT FIRST OUT 按照进入的时间移除对象
SOFT: 软引用 ,移除基于垃圾回收状态和软引用规则的对象
WEAK :弱引用,更积极的移除基于垃圾回收状态和弱引用规则的对象
flushInterval:刷新缓存,默认不自动刷新,可以为任意的正整数,单位是毫秒时间 ,在增删改操作的时候会刷新.
size:缓存被应用的数目,默认1024次查询的结果
readOnly :缓存的只读属性 ,默认是false,代表缓存不能修改
那么各位小伙伴
今天的分享就到这里了
拜拜