Mabatis的二级缓存

Mybatis缓存机制(一级缓存、二级缓存、三级缓存) Mybatis 一级缓存、二级缓存、三级缓存 阅读详情

1.二级缓存又称为全局缓存,它是基于namespace级别的缓存,一个名称空间对应一个二级缓存,也就是说一般情况下同一个映射文件中的查询都共享一个共同的二级缓存空间。

2.一级缓存的生命周期随着一次会话session的关闭而清空,开启二级缓存的情况下,一级缓存里的数据,在清空或者提交之前会转存到二级缓存的空间中继续存在。

3.当一次会话sqlsession的缓存里如果存放着两个不同类型的对象,比如User和Role对象,当一级缓存清空之前,开起二级缓存的情况下,它们两个对象会分别存入各自的名称空间的二级缓存空间中;直白地时候就是一级缓存中两个对象是放在同一Map对象(缓存就是Map对象),在二级缓存中两个对象是分别放在两个独立的Map对象里的(各自的缓存空间里)。

使用二级缓存的实验:

①全局变量cacheEnabled设置为true

②在映射文件中添加一个标签cache

这个简单语句的效果如下:

  • 映射语句文件中的所有 select 语句将会被缓存。
  • 映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
  • 缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
  • 根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
  • 缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
  • 缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

这个标签中还有很多与缓存有关的属性:

eviction可用的收回策略有:

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

默认的是 LRU。

flushInterval(刷新间隔)

可以被设置为任意的正整数,而且它们代表一个合理的毫秒 形式的时间段。默认情况是不设置,也

就是没有刷新间隔,缓存仅仅调用语句时刷新。

size(引用数目)

可以被设置为任意正整数,要记住你缓存的对象数目和你运行环境的 可用内存资源数目。默认值

是 1024。

readOnly(只读)属性可以被设置为 true 或 false。

只读的缓存会给所有调用者返回缓 存对象的相同实例。因此这些对象不能被修改。这提供了很重

要的性能优势。可读写的缓存 会返回缓存对象的拷贝(通过序列化) 。这会慢一些,但是安全,因此

默认是 false。

③Mybatis的二级缓存使用的序列化接口,所以,我们要使用二级缓存,我们的JavaBean就必须实现序列化接口

 

面试官:为什么不推荐使用 MyBatis 二级缓存? 在查询到结果后,会调用 SqlSession 的 commit 方法进行提交(如果开启事务的话,提交 SqlSession 走的不是这里了,但最终填充二级缓存的地方是一样的。springboot 集成 mybatis 的话,如果没有开启事务,每次执行查询,都会创建新的 SqlSession,所以即使是在同一个方法中进行查询操作,那也是跨会话的。针对这种情况,mybatis通过一级缓存来解决:在同一次查询会话(SqlSession)中如果出现相同的语句及参数,就会从缓存中取出,不再走数据库查询。 阅读详情

相关推荐

【为什么要禁用mybatis二级缓存?】

MyBatis 的二级缓存虽然可以提高性能,但也可能导致数据不一致性,特别是在高并发或多线程的生产环境中。建议在不需要极高读取效率的场景下关闭二级缓存,确保数据的一致性和准确性。在使用二级缓存时,应仔细设计缓存失效策略,以避免出现 stale 数据问题,这可能会增加系统的复杂性和维护成本。

weixin_44424997的博客 381

mybatis-一二级缓存

一二级缓存的说明及设置

stein的博客 1642

混合编程实战:C#集成C++ PCL点云处理库,打造跨语言动态链接库

本文详细介绍了C#与C++混合编程实战,重点讲解如何通过动态链接库(DLL)集成C++ PCL点云处理库,实现跨语言协作。内容涵盖环境配置、PCL功能封装、C#调用DLL的完整方案,以及性能优化和错误处理等进阶技巧,帮助开发者高效处理大规模点云数据,提升工业软件开发效率。

weixin_42620913的博客 383

MyBatis的一级缓存和二级缓存

MyBatis的一级缓存与二级缓存

weixin_51712525的博客 975

R语言实战:5分钟搞定相加交互效应分析(逻辑回归/Cox回归/GLMM/GEE全支持)

本文详细介绍了如何利用R语言中的`scitable`包快速实现相加交互效应分析,支持逻辑回归、Cox回归、GLMM和GEE等多种模型。通过自动化计算RERI、AP和SI等指标,大幅提升临床研究和流行病学分析的效率与准确性,特别适合处理多因素联合作用的复杂场景。

fanta的博客 672

安卓逆向实战:利用Frida-RPC自动化获取大麦演唱会数据

本文详细介绍了如何利用Frida-RPC技术实现安卓逆向自动化,以获取大麦演唱会数据。通过实战演示,从环境搭建、使用Frida动态分析定位核心签名算法,到封装为可复用的Python脚本,完整解析了自动化数据获取的技术路径与工程化思考。

cheese的博客 979

Mabatis 缓存设置(一级缓存、二级缓存)

  MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率。一般提到Mabatis缓存的时候,都是指二级缓存。一级缓存(本地缓存)默认会启用。 默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存)开启。 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。 为了提高扩展性。MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存 一、一级缓存 一级缓存(local cache), 即本地缓

weixin_43800761的博客 625

大一Python之循环解决实际问题

pythin之循环解决实际问题

weixin_66263546的博客 2289

mybatis最后一次补充

因标签原因会造成符号的错误解读,出现报错,所以进行转义,使字符显示正常也可以用<![CDATA[ 语句 ]]>来包住字符,防止被解析,

m0_69119074的博客 184

agent-browser OpenClaw 的最佳搭档

agent-browser 是专为 AI Agent 设计的浏览器自动化工具,目前被公认为 OpenClaw 的最佳配套方案。这份技术文档完整记录了其架构、协议、性能调优与常见问题处理,非常适合想让OpenClaw 真正“上手”互联网的开发者与老用户。

liu_zhiyi的博客 1782

PCIe协议之 Equalization篇 之 谈谈几种模式

对于两端有能力最高支持 32 GT/s 及以上速率的设备,如果把目标速度设置为 8 GT/s 或 16 GT/s 速率,是不建议采用 Bypass-Equalization-to-Highest-Rate 模式的,即便采用了,也不会针对 8 GT/s 或 16 GT/s 的目标速率进行 EQ。对于支持 32 GT/s 及以上速率的设备,其可能根本无需工作在 8 GT/s 或 16 GT/s 速率,这时再针对 8 GT/s 或 16 GT/s 速率进行 EQ,多少有点浪费。

那么菜的博客 567

Mybatis缓存

Mybatis缓存详解

qq_53748733的博客 331

【Python基础】FastAPI 从入门到项目实战操作详解

【Python基础】FastAPI从入门到使用实战操作详解

congge_study的博客 456

mabatis缓存

一级缓存 public static SqlSession getSqlSession() { String resource = "mybatis-config.xml"; InputStream inputStream = null; try { inputStream = Resources.getResourceAsStre...

weixin_30300225的博客 123

UFSV3.1-RPMB实现与测试

UFS RPMB功能验证与测试指南 本文介绍了UFS(通用闪存存储)中RPMB(重放保护内存块)的功能验证与测试方法。主要内容包括: RPMB基础配置: 在Linux系统中查看RPMB设备节点 读取RPMB单元描述符获取配置信息 配置RPMB区域大小(16MB)和使能状态 RPMB特性验证: 获取单次写最大请求(16KB) 测试未编程认证密钥时的读写操作 验证认证密钥编程过程 测试用例: 包含4个测试用例,验证RPMB在不同状态下的行为 提供了详细的命令行操作和预期结果 本文可作为UFS RPMB功能验证。

小码哥的博客 1256

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

MyBatis 二级缓存全详解

MyBatis 二级缓存全详解 目录 MyBatis 二级缓存介绍 二级缓存开启条件 探究二级缓存 二级缓存失效的条件 第一次SqlSession 未提交 更新对二级缓存影响 探究多表操作对二级缓存的影响 二级缓存源码解析 二级缓存的创建 二级缓存的使用 是否应该使用二级缓存? 我们在上一篇文章 ( https://mp.weixin.qq.com/s/4Puee_pPCNArkgnFaYlIjg ) 介绍了 MyBatis 的一级缓存的作用,如何开启,一级缓存的本质是什么,

夏天 504

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MyBatis中的一级缓存和二级缓存

一级缓存 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的。 一级缓存的工作原理: image.png   用户发起查询请求,查找某条数据,sqlS...

qq_17312239的博客 165

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MyBatis:二级缓存

基本知识: 分类: 内置二级缓存(其主要任务是映射) 外置第三方产品 内置二级缓存: 开启方法: 在映射文件中添加标签 操作的实体类实现serializabel接口 映射文件 实现接口 底层工作原理:二级缓存底层也是map,key(hashCode+StatementId+ 增删改对二级缓存的影响:会刷新二级缓存,但和一级不同的是将va

weixin_41113108的博客 792

Mybatis自定义二级缓存-下

前言        在前一篇博客里面讲了如何实现Mybatis二级缓存的自定义,但是并没有一个完整的实现,并且还没有详解如何使用二级缓存等。这篇文章就来结束这个系列。选取缓存介质        在这里的话,我们需要来选取一个合适的缓存介质,对于我们而言,Mybatis的二级缓存是基于namespace的,这也就为多台机器共用二级缓存提供了可能性。也正因为如此,我们不可能将缓存放在本机的内存中,类似于

jacker 1313

MyBatis 二级缓存

文章目录一、二级缓存简介二、准备工作1、表2、表对应的实体类3、dao层接口4、接口对应的xml三、二级缓存步骤1、开启全局缓存2、在要使用二级缓存的Mapper中开启四、测试 MyBatis 缓存及原理 MyBatis 一级缓存 MyBatis 二级缓存 一、二级缓存简介 二级缓存也叫全局缓存,由于一级缓存的作用域太低了,所以就诞生了二级缓存 它是基于mapper级别的缓存,一个***mapper.xml文件对应一个二级缓存 工作机制: 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中

lesileqin的博客 237

Mybatis二级缓存,你确定要用么?

击上方“程序猿技术大咖”,关注加群讨论最近在优化项目,考虑到热点操作进行缓存时,是否引入MyBatis的二级缓存?并对此做了大量的调研、验证,在此整合相关内容、分享给大家。一、Mybat...

xcbeyond|疯狂源自梦想,技术成就辉煌 1361

二级缓存失效_Mybatis一二级缓存的使用和实现原理

概述针对查询操作,mybatis支持通过缓存的方式来减少SQL的调用,提高查询性能。在缓存级别方面分为一级缓存和二级缓存,一级缓存的粒度较小,是与某个SqlSession绑定的,只对该SqlSession的相关查询操作进行缓存,不同SqlSession实例之间相互不影响,缓存为使用本地内存实现;二级缓存是一种全局缓存,是由所有SqlSession实例所共享的,即不同SqlSession实例查询时产...

weixin_29540599的博客 97

Mybatis二级缓存测试时间差

public class Start2 { public static void main(String[] args) throws IOException { String resource = "mybatis-conf.xml"; InputStream inputStream = Resources.getResourceAsStream(resou...

lyy747425777的博客 188

MyBatis 中一级缓存与二级缓存:原理、使用与最佳实践

MyBatis通过两级缓存机制优化数据库访问性能:一级缓存为SqlSession级别,默认开启且不可关闭,适合单会话内的重复查询;二级缓存为Mapper级别,需手动配置,可跨会话共享,适用于低频修改的高频查询场景。使用时需注意:一级缓存会随增删改操作自动清空,二级缓存需实体类序列化且在多表关联时易产生脏数据。分布式环境下建议使用Redis等第三方缓存替代内置二级缓存。合理运用缓存可显著提升性能,但需权衡数据实时性与一致性,避免脏读问题。

weixin_45941064的博客 1152

Mybatis二级缓存的使用

Mybatis中二级缓存的使用   二级缓存开启会导致一个问题,缓存的

zhilinboke的博客 1056
上一篇: Mybatis一级缓存
下一篇: MyBatis使用缓存的配置总结
synchronizeOn
博客等级 码龄3年 1193粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值