首页 > 其他分享 >mybatis的二级缓存详解

mybatis的二级缓存详解

时间:2024-07-26 13:26:30浏览次数:14  
标签:缓存 Session 配置 MyBatis 二级缓存 详解 mybatis 启用

MyBatis 的二级缓存是一种强大的查询缓存机制,它在默认情况下是关闭的。要启用二级缓存,需要在 SQL 映射文件中添加 <cache/> 标签。以下是对 MyBatis 二级缓存的详细解释:

1. 基本概念

  • 一级缓存:基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session。当 Session 冲刷(flush)或关闭(close)之后,该 Session 中的所有 Cache 将清空,默认打开一级缓存。

  • 二级缓存:与一级缓存不同,其存储作用域为 Mapper(Namespace)。默认不开启二级缓存,但可以通过配置来启用,并且可以自定义存储源,如 Ehcache。

2. 启用和配置

要启用二级缓存,首先需要在 MyBatis 的全局配置文件中设置 cacheEnabled 参数为 True。然后,在 SQL 映射文件中添加 <cache/> 标签即可。

3. 缓存行为

  • 缓存刷新:所有 insert、update 和 delete 操作都会刷新缓存。
  • 缓存驱逐策略:使用 LRU(Least Recently Used)算法进行缓存对象的驱逐。此外,还可以设置其他驱逐策略,如 FIFO、SOFT 或 WEAK。
  • 缓存大小:可以通过 size 属性设置缓存的最大引用数或对象数量。
  • 刷新间隔:通过 flushInterval 属性设置以毫秒为单位的刷新间隔时间。
  • 只读模式:通过 readOnly 属性设置为 true 或 false 来控制是否允许对缓存进行写操作。

4. 高级配置

除了上述基本配置外,还可以对缓存进行更高级的配置,例如实现自定义缓存或为第三方缓存方案创建适配器来完全覆盖缓存行为。

5. 示例代码

<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
<mappers>
<mapper resource="path/to/your/mapper.xml "/>
</mappers>
</configuration>

<cache />

总结

MyBatis 的二级缓存提供了一种高效的数据访问优化手段,通过简单的配置即可实现强大的查询缓存功能。它不仅增强了应用的性能,还提高了数据处理的效率。通过灵活配置缓存参数,可以满足各种复杂场景下的需求。

标签:缓存,Session,配置,MyBatis,二级缓存,详解,mybatis,启用
From: https://blog.csdn.net/qq_64903447/article/details/140687772

相关文章

  • ElasticSearch第1讲(4万字详解 Linux下安装、原生调用、API调用超全总结、Painless、IK
    ElasticSearch官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html非官方中文文档:https://learnku.com/docs/elasticsearch73/7.3极简概括:基于ApacheLucene构建开源的分布式搜索引擎。解决问题:MySQLlike中文全文搜索不走索引......
  • 详解视频中的I帧、P帧、B帧、GOP、IDR 和PTS, DTS
    一.视频传输原理视频是利用人眼视觉暂留的原理,通过播放一系列的图片,使人眼产生运动的感觉。单纯传输视频画面,视频量非常大,对现有的网络和存储来说是不可接受的。为了能够使视频便于传输和存储,人们发现视频有大量重复的信息,如果将重复信息在发送端去掉,在接收端恢复出来,这样就......
  • JavaWed过滤器和监听器(知识回顾+详解)
    过滤器 Filter   1.1概念       在浏览器和目标资源之间进行过滤的中间组件。       请求到达目标资源之前进行过滤。       响应到达浏览器之前进行过滤。   1.2定义过滤器的步骤      1.写一个java类,实现Filter接口   ......
  • leetcode103. 二叉树的锯齿形层序遍历,简单易懂附代码详解
    leetcode103.二叉树的锯齿形层序遍历给你二叉树的根节点root,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。示例1:输入:root=[3,9,20,null,null,15,7]输出:[[3],[20,9],[15,7]]示例2:输入:root=[1]输出:[[1......
  • Springboot 的Bean生命周期五步、七步、十步详解以及框架源码解读生命周期-面试热点-x
    文章目录Springboot的Bean生命周期五步、七步、十步详解以及框架源码解读生命周期为什么要知道Bean的生命周期Bean的生命周期之五步堆栈信息:代码验证执行结果为Bean生命周期之七步执行结果Bean生命周期之十步增加的三步测试代码如下:执行结果:Bean的生命周期总结其他......
  • Android开发 - Canvas类与Paint画笔的绘制详解与使用
    Canvas类是什么Android中Canvas类常用于自定义View等操作中,Canvas则如同一张画布可以在上面绘制内容,然后这张画布也可以叠加其他的图层或者平移旋转等操作。Canvas对象的获取方式有两种:一种我们通过重写onDraw方法,View中重写onDraw(Canvascanvas)Canvas对象会被当做参数传递过......
  • Android开发 - Canvas中Path路径的详解与使用
    Path回顾Path类封装复合(多轮廓)几何路径由直线段、二次曲线和三次曲线组成。它可以用画布绘制:canvas.drawPath(path,paint),填充或笔划(基于绘画的样式),或者可以用于剪裁或绘制路径上的文本。Path既是路径,路径走多了就变成一种套路,只要我们会解套,那这种套路就是高速公路。路径走完形......
  • 数据结构之队列详解
    1.队列的概念以及结构队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFo(FristinFristout)的特性入队列:进行插入才操作的一端称为队尾出队列:进行删除操作的一端称为队头2.队列的实现队列也可以使用数组和链表的结构实现,使用......
  • Profinet转ModbusTCP网关模块的配置与应用详解
    Profinet转ModbusTCP网关模块的配置与应用详解Profinet转ModbusTCP网关模块(XD-ETHPN20)是一种常见的工业通信设备,广泛应用于现代工业自动化系统中。通过使用Profinet转ModbusTCP网关模块(XD-ETHPN20)将Profinet协议转换成ModbusTCP协议,实现了不同网络之间的互联互通。这种网关设备......
  • 3、集成Mybatis框架、JDBC、mybatis-plus
    简化代码加入lombok依赖<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency> 1、pom.xml添加jdbc、mysql驱动、mybatis框架、mybatis-plus<dependency><groupId>org.sprin......