Mybatis第4天(缓存)
一,Mybatis缓存
查询两次,只执行了一次查询语句
缓存
数据的缓冲区
一级缓存
作用域:存储在单个的SqlSession里面
默认开启
二级缓存
实际上是一个全集缓存
作用域:存储在对应的XXXMapper里面(每一个Mapper的工作空间)
需要手动开启,开启之后,数据还是会优先缓存到一级缓存,当一级缓存失效后,会自动进入到二级缓存中
开启缓存步骤:
- 先在mybatis-config.xml中配置
<settings>
<!-- 配置Log4j日志 -->
<setting name="logImpl" value="LOG4J"/>
<!-- 配置映射级别 -->
<setting name="autoMappingBehavior" value="NONE"/>
<!-- 设值缓存 -->
<setting name="cacheEnabled" value="true"/>
</settings>
- 在XXXMapper.xml中配置
<!-- 在当前的mapper中使用二级缓存 可用的清除策略有:
LRU – 最近最少使用:移除最长时间不被使用的对象。
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。
flushInterval:刷新时间
size:缓存的数量
readOnly:只读
-->
<cache eviction="FIFO" flushInterval="60000" size="512"
readOnly="true" />
配置二级缓存后,即使关闭了会话,也还是会缓存到二级缓存中
缓存失效的情况
-
进行了增删改之后(由于进行了增删改,有可能会改变原来缓存的数据,所以会让缓存失效.注意:一二级缓存都会清除)
-
执行了不同的XXXMapper.xml
-
手动清除(只清除一级缓存)
//手动清除缓存
ss.clearCache();
- 不同的SqlSession查询不同的东西
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?