Mybatis 缓存

AR Tag 与 ROS:从基础部署到机器人视觉定位实战 本文详细介绍了AR Tag技术在ROS环境下的部署与应用,涵盖从基础原理到机器人视觉定位的实战技巧。通过分析AR Tag的特征提取、位姿解算等核心技术,结合ROS工具包`ar_track_alvar`的配置优化,帮助开发者实现高精度的视觉定位系统。文章还分享了深度相机配置、坐标转换及性能优化等实用经验,适用于仓储机器人、物流分拣等场景。 阅读详情

Mybatis 缓存

我们知道当我们需要去查数据库的时候,都需要与数据库产生连接,然后关闭连接,但是这种动作是十分浪费资源的,这个时候就出现了缓存机制。

缓存机制就是用来解决高并发问题的。

早期的时候网络用户不多的时候,只需要客户端访问服务器,服务器去数据库查询就可以查出来了

请添加图片描述

但是当后来用户越来越多的时候,访问速度开始越来越慢,然后就出现了Memcached缓存服务器,将一些查询出来的东西放在缓存里面,这样在下次查询相同数据的时候,就不用走数据库了,直接走Memcached缓存服务器了

请添加图片描述

使用缓存能够让我们减少与数据库的交互,来解决高并发问题。

注意点:

  • 建议在经常查询且不经常改变的数据上使用缓存。

  • 映射语句文件中的所有 select 语句的结果将会被缓存。

  • 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。

  • 缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存。

    • LRU – 最近最少使用:移除最长时间不被使用的对象。
    • FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
    • SOFT – 软引用:基于垃圾回收器状态和软引用规则移除对象。
    • WEAK – 弱引用:更积极地基于垃圾收集器状态和弱引用规则移除对象。
  • 缓存不会定时进行刷新(也就是说,没有刷新间隔)。

缓存失效的情况:

  • 查询不同的结果
  • 使用增删改语句进行操作时会刷新数据库
  • 查询不同的Mapper.xml
  • 手动清除缓存

一级缓存

一级缓存是默认开启的,它是SqlSession级别的,一次会话内有效,也就是在SqlSession的开启和关闭期间才有效。

@Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        HashMap map = new HashMap();

        ArrayList<Integer> ids = new ArrayList<>();
        ids.add(1);

        map.put("ids",ids);
        mapper.getBlogForeach(map);

        mapper.getBlogForeach(map);

        sqlSession.close();
    }

我们查询相同的一个人,这个人的id都为1

请添加图片描述

可以看到我们只执行了一次SQL,这就是缓存

但是当我们查询不同的用户的时候是需要执行两次SQL的

@Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        HashMap map = new HashMap();

        ArrayList<Integer> ids = new ArrayList<>();
        ids.add(1);

        map.put("ids",ids);
        mapper.getBlogForeach(map);

        System.out.println("------------------------------------------");

        ids.remove(0);
        ids.add(2);
        mapper.getBlogForeach(map);

        sqlSession.close();
    }

可以看到结果执行了两条SQL

请添加图片描述

二级缓存

默认情况下,Mybatis只启动了会话等级的缓存也就是一级缓存,而二级缓存是需要手动开启和配置的。

二级缓存是基于namespace级别的,一个命名空间对应一个二级缓存。

工作机制

  • 一个会话查询的数据会被保存在一级缓存中
  • 但是当这个会话关闭的时候,一级缓存中的数据也就不存在了,但是我们想要的是,会话关闭之后,一级缓存的数据会被保存到二级缓存
  • 这样新的会话查询信息的时候就可以从二级缓存中获取数据了
  • 不同的Mapper查出的数据会存在自己对应的二级缓存中

使用:

<!--    开启二级缓存    -->
<cache/>

你也可以手动的去定制二级缓存

<cache
    <!--   清楚策略     -->
            eviction="FIFO"
    <!--    自动刷新缓存的时间间隔,以毫秒为单位,下面是60秒    -->
            flushInterval="60000"
    <!--    最多存储512个引用    -->
            size="512"
    <!--    缓存中的数据只读    -->
            readOnly="true"/>

下面写了一个测试类,查询指定id的用户,可以看到我们先关闭了sqlSession,然后使用sqlSession2去查询

@Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        SqlSession sqlSession2 = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        BlogMapper mapper2 = sqlSession2.getMapper(BlogMapper.class);
        HashMap map = new HashMap();

        ArrayList<Integer> ids = new ArrayList<>();
        ids.add(1);

        map.put("ids",ids);
        mapper.getBlogForeach(map);
        sqlSession.close();



        HashMap map2 = new HashMap();

        ArrayList<Integer> ids2 = new ArrayList<>();
        ids2.add(1);

        map2.put("ids",ids2);
        mapper2.getBlogForeach(map2);

        sqlSession2.close();
    }

保存到缓存中的对象实体类必须实现序列化接口Serializable,否则就会报错

请添加图片描述

最终结果

请添加图片描述

小结

  • 每一个Mapper查询的数据都只会存在自己对应的二级缓存中
  • 所有的缓存都会先放在一级缓存中
  • 只有在一级缓存失效的时候才会转存到二级缓存

Mybatis缓存原理

请添加图片描述

自定义缓存

我们可以自己定制一些缓存,使用方法如下

1.导包

<!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache -->
<dependency>
    <groupId>org.mybatis.caches</groupId>
    <artifactId>mybatis-ehcache</artifactId>
    <version>1.2.2</version>
</dependency>

2.开启缓存

<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

3.自定义缓存配置文件

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
         updateCheck="false">
    
    <diskStore path="./tmpdir/Tmp_EhCache"/>

    <defaultCache
            eternal="false"
            maxElementsInMemory="10000"
            overflowToDisk="false"
            diskPersistent="false"
            timeToIdleSeconds="1800"
            timeToLiveSeconds="259200"
            memoryStoreEvictionPolicy="LRU"/>

    <cache
            name="cloud_user"
            eternal="false"
            maxElementsInMemory="5000"
            overflowToDisk="false"
            diskPersistent="false"
            timeToIdleSeconds="1800"
            timeToLiveSeconds="1800"
            memoryStoreEvictionPolicy="LRU"/>
</ehcache>
相位相关匹配法的opencv C++实现 这一段就是PCIAM算法的核心了,计算两幅图像的峰值相关矩阵,也是完全按照matlab移植过来的,但是后面几行,是为了筛选一些不可能存在的情况,比如边缘处的完全重合,或者只有一行,或者一列重合等等情况,由于PCIAM算法在边缘处的响应值高,所以在一些场景下可能是一种干扰,所以进行了剔除,当然可以不剔除,就是对后期的峰值选取会有影响。头文件,以及各类函数,还有主函数,第一次独立的写这种分文件类型的项目,写的拉跨还请包涵,以及当然可以转成类的形式,但感觉有点小麻烦,后期再修改吧。 阅读详情

相关推荐

傻瓜式下载、安装CentOS7操作步骤

CentOS7.9下载和安装操作步骤

weixin_45608163的博客 1万+

MyBatis 中如何使用缓存

除了使用 MyBatis 提供的缓存实现类以外,还可以自定义缓存实现类。return id;} }在上面的示例代码中,实现了 MyBatis 的 Cache 接口,使用了一个 HashMap 作为缓存实现。要使用自定义缓存,需要在配置文件 mybatis-config.xml 中进行配置。下面是一个简单的配置示例:</</</</</

IT徐师兄 2535

Nature风格的北半球投影图,几行代码就能绘制...

在子刊***Nat. Clim. Chang.***中,通过北极俯视投影表示NAO和AO的EOF分解。仅在定义图层的时候设置为该投影,其余设置content,绘制contourf都是PlateCaree。如子刊Nature Geosci中表示了海冰的漂移,还添加了DEM底图,非常美观。以海温数据为例,ERA5月温度平均,是一张721*1440的0.25degTIF。现在的结果看起来不错,但太大了,我们如果只需要北半球的数据,则需要指定经纬度。绘制完结果也是正方形,和ArcGIS差不多,见之前的推文。

wlh2067的博客 1292

mybatis缓存

mybatis缓存知识

qq_54247497的博客 273

ais信号接收设备_国内首款基于软件无线电技术的AIS基站投入测试使用

星网宇达子公司北京凯盾环宇科技有限公司经过多年的潜心研发,成功研制出国内首台基于软件无线电(SDR)的CATON 9011 AIS基站。该基站采用软件无线电技术,利用软件数字技术代替传统的模拟电路,大大的降低了模拟器件的使用率,提高了基站的可靠性和使用年限。CATON 9011 AIS基站研制依据ITU-R M.1371-5、IEC 62320-1、IEC 61162-1等国际标准,兼容...

weixin_29057163的博客 2334

PCIE Lane Margining Linux 环境配置

Copy all the provided files in folder PYC38 or PYC310 to the created pcie_lmt folder. Index of /ftp/python/3.8.10/Copy below commands to a file and rename it as "scan_pcie.py", the commands are from "685662 PCIe-LMT-Gen4_Gen5-r0p77.pdf" in the lane margi

mysongshine的博客 1436

MyBatis如何开启缓存?

需要注意的是,缓存虽然可以提高系统性能,但有时也会因为缓存数据过时或者数据不一致等问题,造成脏数据问题。在开启缓存时,要根据具体情况适当调整缓存策略,以确保数据的一致性和正确性。当多次执行同样的查询语句时,第一次查询时会将结果放入一级缓存中,在第二次查询相同的语句时,直接从缓存中获取,避免了重复的。二级缓存:与一级缓存不同的是,二级缓存是需要手动开启的,并且它是跨。执行相同的查询语句,那么这些查询结果会被放到同一个二级缓存中。中,缓存可以通过两种方式进行开启:一级缓存和二级缓存。一级缓存:默认情况下,

m0_69602951的博客 845

从零到英雄:WSL2与Ubuntu22.04的终极性能调优指南

本文详细介绍了如何在Windows系统中通过WSL2与Ubuntu22.04进行性能调优,涵盖内核定制、GPU加速、网络优化等关键技巧,帮助开发者打造媲美原生Linux的高性能开发环境,特别适合AI训练和大数据处理等资源密集型任务。

weixin_29218509的博客 523

MYBATIS缓存

MYBATIS的第一缓存是SQLSession 并且这种缓存是即使在仅仅只有一个框架的情况下都是存在的, 因为第一缓存是默认开启的(default), 因为第一缓存级别使用的是SqlSession, 所以在调用同一个SqlSession, 并且在这同一个SqlSession当中多次查询同一个数据, 那么仅仅只会执行一次相应的SQL语句, 之后会直接从SQL缓存当中进行获取以我的测试类为例@Test结果如图所示, 跟我们预想的一样, 在第一级别的缓存下, 仅仅调用了一次相应的查询语句。

2303_79546217的博客 1431

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 370

MNI152 坐标空间和 fsaverage 坐标空间相互转换, 如已知fsaverage空间的坐标如何求MNI152 坐标?aparc.a2009s.annot转化到MNI152空间?

大多数神经影像学研究的结果是在体积(例如,MNI152)或表面(例如,fsaverage)坐标系中报告的。体积坐标系和表面坐标系之间的准确映射可以促进许多应用,例如将 fMRI 组分析从 MNI152 投影到 fsaverage 以进行可视化或从 fsaverage 投影静息状态 fMRI 分区对 MNI152进行新数据的体积分析。Wu et al., 2018 评估了三种在 MNI152通过模拟上述应用的 Colin27 和 fsaverage 坐标系:将组平均数据从 MNI152/Colin27 投影到

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 2966

MyBatis——MyBatis的缓存

MyBatis的缓存

wan的博客 2374

2024 年 9 月青少年软编等考 C 语言三级真题解析

2024 年 9 月青少年软编等考 C 语言三级真题解析。

发布少儿编程考级的真题和优秀竞赛题解析,以及一些讲义。 1739

【MyBatis】| MyBatis的缓存

【MyBatis】| MyBatis的缓存

m0_61933976的博客 5028

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Mybatis缓存

Mybatis缓存缓存的基本概念Mybatis一级缓存证明一级缓存的存在编写用户持久层 Dao 接口编写用户持久层映射文件编写测试方法一级缓存的分析测试一级缓存的清空添加updateUser方法测试缓存的同步Mybatis二级缓存二级缓存结构图二级缓存的开启与关闭第一步:在 SqlMapConfig.xml 文件开启二级缓存第二步:配置相关的 Mapper 映射文件第三步:配置 statement 上面的 useCache 属性二级缓存测试二级缓存注意事项 缓存的基本概念 缓存是存在于内存中的临时数据。

『愚』的博客 5523

廖雪峰Python教程[完整版]

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

【MyBatis】MyBatis的缓存

因此这些对象不能被修改。查询的数据会被缓存,下次查询相同的数据,就 会从缓存中直接获取,不会从数据库重新访问。先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用。查询的结果会被 缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取。两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效。查询的数据所转换的实体类类型必须实现序列化的接口。最近最少使用的:移除最长时间不被使用的对象。不同的SqlSession对应不同的一级缓存。关闭之后,一级缓存中的数据会写入二级缓存。

Javascript_tsj的博客 1455

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【mybatis】缓存

比如要对数据库进行查询:select * from A因为真正执行的是sqlsession,用sqlsession对他进行查询,查询到的数据会缓存到local catch本地缓存中,下一次再查询,就不用查询数据库了,直接从本地缓存中拿取。$1. 首次进行:@Test@Test结果:执行两次查询,但是sql语句只执行一次。为什么?因为第二次查询从本地缓存查数据。@Test注!!值是true, 表明指向的是同一个地址空间,指向的是同一个对象。

m0_75163045的博客 1956

Mybatis——MyBatis 缓存

MyBatis缓存

秋玄的博客 1652

Mybatis之缓存

一、MyBatis的一级缓存二、MyBatis的二级缓存三、二级缓存的相关配置四、MyBatis缓存查询的顺序五、整合第三方缓存EHCache1、添加依赖2、各个jar包的功能3、创建EHCache的配置文件ehcache.xml4、设置二级缓存的类型5、加入logback日志6、EHCache配置文件说明以上就是Mybatis之缓存的相关知识点,希望对你有所帮助。积跬步以至千里,积怠惰以至深渊。时代在这跟着你一起努力哦!

哥的时代,为你保驾护航 2030

MyBatis 的缓存机制

MyBatis 缓存包括:一级缓存:将查询到的数据存储到 SqlSession 中二级缓存:将查询到的数据存储到 SqlSessionFactory 中或者是集成其它第三方的缓存:比如 EhCache(Java语言开发的),Memcache(C语言开发的)等。注意:缓存只针对于 DQL(查询)语句,也就是说缓存机制只对应 Select 语句。一级缓存默认是开启的一级缓存失效情况包括两种:第一种:第一次查询和第二次查询之间,手动清空了一级缓存。

weixin_61635597的博客 2030

MyBatis之缓存

在当今的 Web 应用程序中,性能是至关重要的。缓存是提高应用程序性能的一种常用技术,它可以减少数据库查询的次数,从而提高应用程序的响应时间。MyBatis 是一个流行的 Java ORM(对象关系映射)框架,它提供了强大的缓存功能,可以帮助开发者提高应用程序的性能。在本博客中,我们将介绍 MyBatis 缓存的基本概念和工作原理,以及如何在 MyBatis 中配置和使用缓存。我们还将介绍一些常见的缓存策略和缓存过期机制,以帮助开发者更好地管理缓存。

liubopro666的博客 2296

MyBatis缓存

什么是缓存?缓存:存储在计算机上的一个原始数据复制集,就是数据交换的缓冲区(称作Cache),是存贮数据(使用频繁的数据)的临时地方。当用户查询数据,首先在缓存中寻找,如果找到了则直接执行。如果找不到,则去数据库中查找。缓存有什么用?缓存的本质就是用空间换时间,牺牲数据的实时性,以服务器内存中的数据暂时代替从数据库读取最新的数据,减少数据库IO,减轻服务器压力,减少网络延迟,加快页面打开速度。缓存的分类文件缓存:文件缓存是把一些需要高速存取的变量缓存在内存中。

热爱编程、热爱生活、热爱探索 2218

MyBatis的缓存

为什么使用缓存?首次访问时,查询数据库,并将数据存储到内存中;再次访问时直接访问缓存,减少IO、硬盘读写次数、提高效率Mybatis中的一级缓存和二级缓存?一级缓存:它指的是mybatis中的SqlSession对象的缓存。当我们执行完查询之后,查询的结果会同时存在在SqlSession为我们提供的一块区域中。当我们再次查询同样的数据,mybatis会先去SqlSession中查询是否有,有的话直接拿出来使用。当SqlSession对象消失时,Mybatis的一级缓存也就消失了。

qq_63242968的博客 1234
上一篇: Mybatis 动态SQL
下一篇: dubbo-admin0.3.0安装教程
小小代码熊
博客等级 码龄7年 5粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值