Mybatis的两级缓存简述
2022/2/10 23:17:31
本文主要是介绍Mybatis的两级缓存简述,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Mybatis的两级缓存简述
- 一级缓存
- 一级缓存分析
- 清空缓存的方式
- 二级缓存
- 二级缓存原理图
- 开启二级缓存步骤
- 二级缓存的禁用
- 缓存的属性配置
一级缓存
一级缓存默认自动开启,存在内存中(本地缓存)不能被关闭,可以调用clearCache()来清空本地缓存,或者改变缓存的作用域,是SqlSession级别的缓存
一级缓存分析
工作原理分析
当用户发起第一次查询team=1001的时候,先去缓存中查找是否有team=1001的对象;如果没有,继续向数据中发送查询语句,查询成功之后会将teamId=1001的结果存入缓存中;
当用户发起第2次查询team=1001的时候,先去缓存中查找是否有team=1001的对象,因为第一次查询成功之后已经存储到缓存中,此时可以直接从缓存中获取到该数据,意味着不需要再去向数据库发送查询语句。
如果SqlSession执行了commit(有增删改的操作),此时该SqlSession对应的缓存区域被整个清空,目的避免脏读。
前提:SqlSession未关闭。
清空缓存的方式
- 1、 session.clearCache( ) ;
- 2、 execute update(增删改) ;
- 3、 session.close( );
- 4、 xml配置 flushCache=“true” ;
- 5、 rollback;
- 6、 commit。
二级缓存
Mybatis默认没有开启二级缓存,需要在setting全局参数中配置开启二级缓存。
二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace。
不同的sqlSession两次执行相同namespace下的sql语句参数相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。
二级缓存原理图
开启二级缓存步骤
1、在Mybatis框架的全局配置文件中开启二级缓存
<!--是否开启二级缓存,默认false-不开启, true:开启--> <setting name="cacheEnabled" value="true"/>
2、在需要二级缓存的Mapper中添加缓存标志
3、实体类必须实现Serializable接口
二级缓存的禁用
对于变化比较频繁的SQL,可以禁用二级缓存。
在开始了二级缓存的XML中对应的statement中设置useCache=false禁用当前Select语句的二级缓存,意味着该SQL语句每次只需都去查询数据库,不会查询缓存。
useCache默认值是true。对于一些很重要的数据尽不放在二级缓存中。
缓存的属性配置
<cache> <property name="eviction" value="LRU"/><!--回收策略为LRU--> <property name="flushInterval" value="60000"/><!--自动刷新时间间隔为60S--> <property name="size" value="1024"/><!--最多缓存1024个引用对象--> <property name="readOnly" value="true"/><!--只读--> </cache> <!-- 属性介绍: 1.映射语句文件中的所有select语句将会被缓存; 2.映射语句文件中的所有CUD操作将会刷新缓存; 3.缓存会默认使用LRU(Least Recently Used)算法来收回; 3.1、LRU – 最近最少使用的:移除最长时间不被使用的对象。 3.2、FIFO – 先进先出:按对象进入缓存的顺序来移除它们。 3.3、SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。 3.4、WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。 4.缓存会根据指定的时间间隔来刷新(默认情况下没有刷新间隔,缓存仅仅调用语句时刷新); 5.缓存会存储列表集合或对象(无论查询方法返回什么),默认存储1024个对象。 6.缓存会被视为是read/write(可读/可写)的缓存,意味着检索对象不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。 -->
如果想在命名空间中共享相同的缓存配置和实例,可以使用cache-ref 元素来引用另外一个缓存。
<cache-ref namespace="com.kkb.mapper.TeamMapper" /> //引用TeamMapper命名空间中的cache。
这篇关于Mybatis的两级缓存简述的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10百万架构师第十三课:源码分析:Spring 源码分析:Spring核心IOC容器及依赖注入原理|JavaGuide
- 2025-01-10便捷好用的电商API工具合集
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀