Mybatis第4天(缓存)

一,Mybatis缓存

查询两次,只执行了一次查询语句
image

缓存

数据的缓冲区

一级缓存

作用域:存储在单个的SqlSession里面
默认开启

二级缓存

实际上是一个全集缓存
作用域:存储在对应的XXXMapper里面(每一个Mapper的工作空间)
需要手动开启,开启之后,数据还是会优先缓存到一级缓存,当一级缓存失效后,会自动进入到二级缓存中
开启缓存步骤:

  1. 先在mybatis-config.xml中配置
 <settings>
 <!-- 配置Log4j日志 -->
    <setting name="logImpl" value="LOG4J"/>
    <!-- 配置映射级别 -->
    <setting name="autoMappingBehavior" value="NONE"/>
    <!-- 设值缓存 -->
    <setting name="cacheEnabled" value="true"/>
  </settings>
  1. 在XXXMapper.xml中配置
<!-- 在当前的mapper中使用二级缓存 可用的清除策略有: 
	LRU – 最近最少使用:移除最长时间不被使用的对象。 
	FIFO – 先进先出:按对象进入缓存的顺序来移除它们。 
		SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。 
		WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。
		flushInterval:刷新时间
		size:缓存的数量
		readOnly:只读
		 -->
	<cache eviction="FIFO" flushInterval="60000" size="512"
		readOnly="true" />

配置二级缓存后,即使关闭了会话,也还是会缓存到二级缓存中
image

缓存失效的情况

  1. 进行了增删改之后(由于进行了增删改,有可能会改变原来缓存的数据,所以会让缓存失效.注意:一二级缓存都会清除)
    image

  2. 执行了不同的XXXMapper.xml

  3. 手动清除(只清除一级缓存)

//手动清除缓存
		ss.clearCache();
  1. 不同的SqlSession查询不同的东西
posted @   不再犹豫27  阅读(15)  评论(0编辑  收藏  举报
编辑推荐:
· .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 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示