Mybatis的一级缓存和二级缓存及其区别

缓存的介绍 缓存(cache),数据交换的缓冲区,当应用程序需要读取数据时,先从数据库中将数据取出,放置在 缓冲区中,应用程序从缓冲区读取数据。一级缓存是默认开启的,只能对同一个SqlSession对象而言//结果为true//结果为false因为这里的sqlSession被关掉了一次,又重新建立的sqlSession和之前的不是同一个,缓存被删掉重新建立了一个,所以“ == ”的结果是false。 阅读详情

今天来讲一下Mybatis的一级缓存, 二级缓存及其区别

目录

一. 缓存是什么

二. 一级缓存

        一级缓存是什么

        一级缓存何时清空?

        一级缓存的流程图

三. 二级缓存

        二级缓存是什么

        二级缓存何时存入

        二级缓存有过期时间,但没有后台线程进行检测 

        二级缓存的流程图

注意事项


一. 缓存是什么

        缓存其实就是存储在内存中的临时数据,这里的数据量会比较小,一般来说,服务器的内存也是有限的,不可能将所有的数据都放到服务器的内存里面,所以, 只会把关键数据放到缓存中,  这样的话访问起来非常快, 而且方便(doge),当 Mybatis 调用 Dao 层查询数据库时,先查询二级缓存,二级缓存中无对应数据,再去查询一级缓存,一级缓存中也没有,最后去数据库查找。

二. 一级缓存

        一级缓存是什么

         一级缓存作用域是sqlsession级别的,同一个sqlsession中执行相同的sql查询(相同的sql和参数),第一次会去查询数据库并写到缓存中,第二次从一级缓存中取。

        一级缓存何时清空?

        如果中间sqlSession去执行commit操作(执行插入、更新、删除),则会清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。一级缓存时执行commit,close,增删改等操作,就会清空当前的一级缓存;当对SqlSession执行更新操作(update、delete、insert)后并执行commit时,不仅清空其自身的一级缓存(执行更新操作的效果),也清空二级缓存(执行commit()的效果)。

        一级缓存的流程图

三. 二级缓存

        二级缓存是什么

        二级缓存指的是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。

        二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。

        二级缓存何时存入

        在关闭sqlsession后(close),才会把该sqlsession一级缓存中的数据添加到namespace的二级缓存中。

        开启了二级缓存后,还需要将要缓存的pojo实现Serializable接口,为了将缓存数据取出执行反序列化操作,因为二级缓存数据存储介质多种多样,不一定只存在内存中,有可能存在硬盘中。

        二级缓存有过期时间,但没有后台线程进行检测 

            
        需要注意的是,并不是key-value的过期时间,而是这个cache的过期时间,是flushInterval,意味着整个清空缓存cache,所以不需要后台线程去定时检测。

每当存取数据的时候,都有检测一下cache的生命时间,默认是1小时,如果这个cache存活了一个小时,那么将整个清空一下。

 

        二级缓存的流程图

 

注意事项

  1. 映射语句文件中的所有 select 语句的结果将会被缓存。
  2. 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。
  3. 缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存。
  4. 缓存不会定时进行刷新(也就是说,没有刷新间隔)。
  5. 缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用。
  6. 缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。
     
STM32—时钟树(结合系统时钟函数理解) 时钟树的概念: 我们可以把MCU的运行比作人体的运行一样,人最重要的是什么?是心跳! 心脏的周期性收缩将血液泵向身体各处。心脏对于人体好比时钟对于MCU,微控制器(MCU)的运行要靠周期性的时钟脉冲来驱动,而这个脉冲的始源往往是由外部晶体振荡器提供时钟输入,最终转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径犹如大树的养分由主干流向个分支,因此称为时钟树。 STM32时钟: 在STM32... 阅读详情

相关推荐

抖音用户评论和ID的采集方法

随着5G时代的普及,各大运营商的套餐纷纷推出,使得流量成本进一步降低。同时5G线路高宽带、低延迟的技术特性和手机普及,让视频用户访问量快速增加。 由于大量的视频工具和拍摄APP的提供,让短视频的拍摄、制作包括发行都变得更加简单便捷,越来越多的普通人可以投入视频创作,创造了更丰富的互联网内容,视频作者从视频推广中能获取粉丝和推广收益。 目前抖音就是目前最重要的短视频平台之一,要及时获取上面的用户评论和ID,需要结合爬虫代理实现采集方案,下面的代码就能快速采集相关信息: package htmlunit; i

ssbt_2020的博客 6787

Mysql中一级缓存二级缓存区别

一级缓存: (1) 一级缓存也称本地缓存,sqlSession级别的缓存。一级缓存是一直开启的;与数据库同一次会话期间查询到的数据会放在本地缓存中。 如果需要获取相同的数据,直接从缓存中拿,不会再查数据库。   一级缓存失效的四种情况:       1.sqlSession不同。       2.sqlSession相同,查询条件不同。因为缓存条件不同,缓存中还没有数据。       3.sqlSession相同,在两次相同查询条件中间执行过增删改操作。       (因为中间的增删改可能对缓存中数

尚未佩妥剑 转眼便江湖 2086

2026年华为od机试真题题库

OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)

面试高手的博客 19万+

mysql的一级缓存和二级缓存

mysql缓存

qxy_1218的博客 2722

Python控制TEMI1000/TEMI1500测试温箱

该温箱是我司从昆山振弘检测设备有限公司采购的TEMI 1000,但是控制器用的是韩国的,关于控温箱这个项目,可参考的资料仅有一份官方的manual,里面包含一些命令格式。只要你有温箱,就应该可以向厂家索取该文档。该温箱的通讯接口只有一个RS232接口,要想实现远程控制,需要有串口转USB的线;类似于下图所以,想依靠python来与之进行通信,还是要通过python 的pyserial库,关于怎么安装pyserial,过于简单,这里不做赘述,可自行百度。

xgh1951的博客 1万+

极验验证码: 一点即过验证(鼠标轨迹分析)

2、第一个验证接口分析(第一个w值还原) 3、第二个验证接口(第二个w值还原)这里定位w生成跟上篇文章一样,就不展开了;主要分析tt值(鼠标轨迹)的生成逻辑

qq_49268524的博客 1009

Mybatis一级缓存和二级缓存的区别

mysql一级缓存和二级缓存的区别

qq_50580366的博客 541

量化交易 米筐 多因子合成(回测中使用)

多因子合成 1、因子合成 将一些相关(高、低)的因子合成一个因子 方法: 使用PCA方式(使用于较强相关性) 2、核心代码 将因子 inc_revenue_ttm 和 operating_revenue_growth_ratio_ttm 合成为一个因子 inc_operating from sklearn.decomposition import PCA pca = PCA(n_components=1) # 因子合并 fund['inc_operating'] = pca.fit_transform(fu

廷益_飞鸟的博客 1062

Mybatis一级缓存和二级缓存分别是什么,区别是什么?

二级缓存的作用域为SqlSessionFactory,是一个映射器级别的缓存,针对不同namespace的映射器。一个会话中,查询一条数据,这个数据会被放到一级缓存中,但是一旦这个会话关闭,一级缓存汇总的数据就会被保存到二级缓存。在同一个SqlSession中,执行相同的sql语句,那么第一次就会去数据库中进行查询,并写到缓存中,如果我们后面还想去访问数据库查询,就直接去一级缓存中获取就可以了。mybatis的的一级缓存是SqlSession级别的缓存,一级缓存缓存的是对象,当SqlSession提。

qq_59510147的博客 3794

安装openclaw时出现npm error code ENOENT npm error syscall spawn git报错的解决方案

本文主要介绍了安装openclaw时出现npm error code ENOENT npm error syscall spawn git报错的解决方案,希望能对使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 12万+

【系统分析师】高分论文:论软件需求验证方法及应用

本文以某清算平台建设项目为例,探讨了软件需求验证方法的应用。该项目旨在隔离银行与支付公司的直接通信,满足央行监管要求。作为系统分析师,作者通过需求测试和需求评审两种方法确保需求质量。需求测试采用概念测试用例提前发现问题;需求评审通过正式与非正式形式多方确认需求。项目结合邮件评审、专家会议等方式,最终形成完善的需求文档。平台上线后运行良好,验证了需求管理的重要性。该案例表明,科学的需求验证是项目成功的关键保障。

数据知道的博客 8125

MyBatis 的一级、二级缓存机制

缓存是存在于内存中的临时数据。默认情况下只会开启一级缓存,也就是局部的 session 会话缓存。每一个 session 会话都会有各自的缓存,是局部的。

yzx3105的博客 1704

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Mybatis的二级缓存问题

一、一级缓存、二级缓存的定义及区别 我们知道mybatis的对JDBC 的一个轻量级的封装,在运行速度方面优于hibernate。 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个(内存区域)数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

y2017的博客 2万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Mybaits一级缓存和二级缓存分别是什么,区别是什么?

实现缓存接口,引入第三方缓存引入【Redis等第三方内存库作为mybatis的缓存】。

qq_52025132的博客 2566

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

mybatis原理分析(三)---一级缓存和二级缓存

文章目录1.概述1.1 BaseExecutor1.2 CachingExecutor2.一级缓存2.1 一级缓存的命中场景2.2 触发清空一级缓存2.3 一级缓存源码分析3 二级缓存3.1 二级缓存的设计3.2 二级缓存的使用3.3 二级缓存的命中场景3.4 二级缓存源码分析3.4.1 query查询操作。3.4.2 commit提交操作。3.4.3 update操作3.5 为什么只有会话提交成功才会更新或清空二级缓存4. 后续 1.概述 上一篇博客《mybatis原理分析(二)—深入理解Executor

gongsenlin341的博客 2063

Mybatis 一级缓存和二级缓存原理区别 (图文详解)

陈睿|mikechen,10年+大厂架构经验,《BAT架构技术500期》系列文章作者,分享十余年架构经验以及面试心得!阅读mikechen的互联网架构更多技术文章合集Java并发|JVM|MySQL|Spring|Redis|分布式|高并发|架构师。

「 虚幻私塾」 253

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

缓存(cache),数据交换的缓冲区,当应用程序需要读取数据时,先从数据库中将数据取出,放置在 缓冲区中,应用程序从缓冲区读取数据。Cache的特点:数据库取出的数据保存在内存中,具备快速读取和使用。 Cache的限制:读取时无需再从数据库获取,数据可能不是最新的。一级缓存也叫SqlSession级缓存,无需手动开启可直接使用,为每个sqlsession单独分配的缓存空间,多个sqlsession之间的缓存不共享。一级缓存实例如下: 2.Dao层: 3.mapper层: 4.view层:

Csrchong的博客 1411

mybatis plus开启二级缓存

mybatis plus开启二级缓存只需要两步 1、启动类:@EnableCaching //允许二级缓存 2、需要缓存的service层上面加上注解 如:@Cacheable(value = “SeatPerson”, key = “#areaNo”) 注:key为传入的值,相当于map中的key当下次请求时发现该key存在,不会再去数据库层进行sql查询,直接从缓存中取;

laozengsky的博客 1830

mybatis中的一二级缓存

一级缓存 Mybatis 对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓 存,一级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调 用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询 后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新, 并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再 次发送SQL到数据库。

2302_77527700的博客 370

mybaits一级缓存和二级缓存的实现

近来看了一下关于mybaits的一些缓存讲解的文章,然后自己也顺着文章看了一下mybaits底层的源码。 (本文部分内容转载于美团的 聊聊MyBatis缓存机制 文章) 目前而言,myabits是最流行的dao层框架,简洁,易上手,开箱即用,但是如果不了解一下底层的东西,可能会造成其他的问题。比如造成的脏数据。 首先谈的肯定是mybaits的工作原理,大家都知道mybaits有一级缓存和...

lmx125254的博客 3930

什么是缓存?Mybaits一级缓存和二级缓存分别是什么,区别是什么?缓存和缓冲区的区别是什么?

缓存(cache)是指数据交换的缓冲区,当应用程序需要读取数据时,先从数据库中将数据取出,放置在 缓冲区中,应用程序从缓冲区读取数据。在我们之前学习javase 中也存在缓存 当我们学习io流时就引入了缓存这一定义,它的存在呢主要要是使用缓冲区(buffer),我们在调用字符流、字节流的构造方法时就会底层就会创建一个长度为8192的byte数组。将读取的数据放在缓冲区的数组中,在取数据的时候就直接在缓冲区中将对应位置的数组转换为字符就可以啦。

weixin_52515164的博客 1064

源码刨析:mybatis二级缓存[954L]

文章目录mybatis_cache系列前言Coding缓存命中规则缓存生命周期源码看二级缓存 mybatis_cache系列 建议按顺序阅读,有一些代码沿用之前的code,与一级缓存完全一致的内容或结果就不再操作了 源码刨析:mybatis一级缓存[954L] 前言 本文主要阐述mybatis二级缓存如何使用,命中规则介绍及缓存生命周期。 最后再从源码刨析缓存创建销毁的底层实现。 基础代码还是基于之前一级缓存的代码,这里就不贴的。 Coding 首先二级缓存默认是关闭的状态,默认的二级缓存我们实

954L 673

领会MyBatis的缓存

MyBatis将数据缓存设计成两级结构,分为一级缓存、二级缓存:        一级缓存是Session会话级别的缓存,位于表示一次数据库会话的SqlSession对象之中,又被称之为本地缓存。一级缓存是MyBatis内部实现的一个特性,用户不能配置,默认情况下自动支持的缓存,用户没有定制它的权利(不过这也不是绝对的,可以通过开发插件对它进行修改);        二级缓存是Appli

qq_36074062的博客 281

Mybaits的一二级缓存

一级缓存是sqlSession范围的缓存,缓存只在当前sqlSession中有效;二级缓存是namespace范围的缓存,在同一个sqlMapper映射下有效;

Alsace_的博客 1023
上一篇: 数据库基本增删改查语法和多表链接查询的方式
下一篇: 描述Servlet生命周期,Servlet是线程安全的吗? 为什么?
小赵在练琴
博客等级 码龄5年 104粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值