首页 > 编程知识 正文

mybatis的一级缓存和二级缓存是什么,mybatis的一级和二级缓存

时间:2023-05-03 10:09:02 阅读:281699 作者:4905

mybatis一级缓存和二级缓存详细介绍
今天整理啦mybatis一级缓存和二级缓存下面为大家介绍一下
一·mybatis一级缓存(sqlSession级别的一个map)
1.一级缓存是一直开启的,是本地缓存,是sqlsession级别的缓存,与数据库同义词会话期间查询到的
数据回放在本地缓存中。以后如果需要获取相同的数据,直接从缓存中拿,没必要再去查询数据库。
2.一级缓存失效情况(没有使用到当前一级缓存的情况,效果就是,还需要在想数据库发出新的查询);
1.sqlSession不同
2.sqlSession相同,查询条件不同(当前以及缓存中还没有这个这个数据)
3.sqlSession相同,两次查询期间执行增删改操作后(这次增删改可能对当前数据有影响)
4.sqlSession相同 手动清空一级缓存(执行openSession.clearCache())

二.mybatis二级缓存(全局缓存):基于namespace级别的缓存:一个namespace对应一个二级缓存
工作机制
1.一个会话.查询一条数据。这个数据就会放到当前会话的一级缓存中
2.如果会话关闭:一级缓存中的数据就会被保存到二级缓存中;新的会话查询信息,就可以参照二级缓存
3,不同namespace查出来的数据就会放在自己对应的缓存中(map)(查出的数据都会被默认先放在一级缓存中,只有会话提交或者关闭以后,一级缓存中的数据才会转到二级缓存中)
二级缓存的用法
开启二级缓存全局配置
在mapper配置本件里面加

eviction:缓存的回收策略
.LRU-最近最少使用的:移除最长时间不被使用的对象
.FIFO-先进先出:按对象进入缓存的顺序来移除它们
.SOFT-软引用:移除基于垃圾回收器状态和软引用规则的对象
.WEAK-弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象
.默认是LRU

flushInterval缓存刷新间隔(缓存多长时间清空一次,默认不清空,设置一个毫秒值)

readOnly:是否只读:(默认false)
true:只读:mybatis认为所有从缓存中获得的数据都是只读数据(不会修改数据)
mybatis为啦加快获取速度,直接就会将数据在缓存中的引用交给用户。不安全,速度快
false:非只读:mybatis觉得获取的数据可能会被修改.
mybatis会利用序列化和反序列化的技术克隆一份新的数据给你,安全,速度慢

size;缓存存放多少元素

type=" ":指定自定义缓存的全类名:实现Cahe接口即可

3.pojo要实现序列化接口

二级缓存相关的配置和属性
1.
true开启全局二级缓存,false 关闭二级缓存,但是不关闭一级缓存
2.每个select标签都有useCache=“true”
false:不使用缓存(一级缓存依然可以使用,二级缓存不会使用)
3.每个增删改标签:flushCache=“true”(默认)
每个查询标签:flushCache=“false”(默认)
增删改执行完成后就会清空缓存
测试:flushCache=“true”:一级缓存就会清空:二级缓存也会被清空
4.openSession.clearCache();只清楚当前session的一级缓存
5.localCacheScore:本地缓存作用域:(一级缓存SESSION);当前会话的所有数据保存在会话缓存中;取值为(STAEMENT)不保存在会话缓存中
缓存的顺序;先看二级缓存再看一级缓存,如果都没有在查询数据

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。