首页 > 其他分享 >MyBatis的缓存

MyBatis的缓存

时间:2022-09-26 23:00:55浏览次数:72  
标签:缓存 一级 SqlSession 查询 二级缓存 MyBatis

1、MyBatis的一级缓存

一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就
会从缓存中直接获取,不会从数据库重新访问
使一级缓存失效的四种情况:
1) 不同的SqlSession对应不同的一级缓存
2) 同一个SqlSession但是查询条件不同
3) 同一个SqlSession两次查询期间执行了任何一次增删改操作
4) 同一个SqlSession两次查询期间手动清空了缓存

2、MyBatis的二级缓存

二级缓存是SqlSessionFactory级别,通过同一个SqlSessionFactory创建的SqlSession查询的结果会被
缓存;此后若再次执行相同的查询语句,结果就会从缓存中获取
二级缓存开启的条件:
a>在核心配置文件中,设置全局配置属性cacheEnabled="true",默认为true,不需要设置
b>在映射文件中设置标签<cache />
c>二级缓存必须在SqlSession关闭或提交之后有效//关闭后生效,提交没测试
d>查询的数据所转换的实体类类型必须实现序列化的接口//因为是存到内存中,所以必须将java数据序列化到内存
使二级缓存失效的情况:
两次查询之间执行了任意的增删改,会使一级和二级缓存同时失效

3、二级缓存的相关配置

在mapper配置文件中添加的cache标签可以设置一些属性:
eviction属性:缓存回收策略
LRU(Least Recently Used) – 最近最少使用的:移除最长时间不被使用的对象。
FIFO(First in First out) – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。
默认的是 LRU。
flushInterval属性:刷新间隔,单位毫秒
默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新
size属性:引用数目,正整数
代表缓存最多可以存储多少个对象,太大容易导致内存溢出
readOnly属性:只读,true/false
true:只读缓存;会给所有调用者返回缓存对象的相同实例。因此这些对象不能被修改。这提供了
很重要的性能优势。
false:读写缓存;会返回缓存对象的拷贝(通过序列化)。这会慢一些,但是安全,因此默认是
false。

4、MyBatis缓存查询的顺序

先查询二级缓存,因为二级缓存中可能会有其他程序已经查出来的数据,可以拿来直接使用。
如果二级缓存没有命中,再查询一级缓存
如果一级缓存也没有命中,则查询数据库
SqlSession关闭之后,一级缓存中的数据会写入二级缓存

 

 

标签:缓存,一级,SqlSession,查询,二级缓存,MyBatis
From: https://www.cnblogs.com/dzs894330350/p/16732880.html

相关文章

  • 整合第三方缓存EHCache
    a>添加依赖<!--MybatisEHCache整合包--><dependency><groupId>org.mybatis.caches</groupId><artifactId>mybatis-ehcache</artifactId><version>1.2.1</version>......
  • SpringBoot 引入 Mybatis plus 及 Mybatis-plus-generator 代码自动生成工具
    简介MyBatis-Plus(opensnewwindow)(简称MP)是一个MyBatis(opensnewwindow)的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。Mybatispl......
  • JavaWeb--Mybatis--2022年9月25日
    第一节  Mybatis概述1.Mybatis概念tips:持久层是什么:负责将数据保存到数据库的那一层代码,以后开发我们会将操作数据库的......
  • 页面缓存<keep-alive>标签的注意点
    <keep-alive>有下面三个属性include 字符串,数组或正则表达式。只有名称匹配的组件会被缓存。exclude 字符串,数组或正则表达式。任何名称匹配的组件都不会缓存。max ......
  • 【Redis】缓存删除策略
    Redis缓存删除策略分为定时删除、定期删除与惰性删除。前两个是主动删除,后一个是被动删除。1定时删除为key设置一个过期时间,时间一到,由定时器任务删除这个key。优......
  • mybatisplus拾遗
    curd方法:1:basemapper自带原生类:可操作基本的curd,2:iservice此为接口,需要使用自定义接口userservice (/自定义userserivice集成iservice  //为什么要自定义userservi......
  • mybatis缓存详解--mybatis单独使用
    本文以mybatis-3.5.11版本为基础,对mybatis缓存进行较详细的解析。注意,本文说明的情况,适用于mybatis单独使用的情况,即,不与spring或其他容器框架结合使用的情况。缓存概念......
  • SpringBoot集成Mybatis-Plus
    简介MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。因此,mybatis-plus包含mybatis的所有功能,因此无需再次......
  • MyBatis 多条件查询、动态SQL、多表操作、注解开发,应有尽有,一网打尽!
    来源:iyu77.blog.csdn.net/article/details/125761737MyBatis封装了JDBC通过Mapper代理的方式,以前繁琐的操作通过“属性与字段映射”就简单化解,MyBatis的动态SQL完美展现了......
  • Mybatis的mapper与Java实体类的关系
    Mybatis当中有一个重要概念:ORM(ObjectRelationMapping),对象关系映射。也就Java实体类的属于与关系型数据库column的对应关系。我们在mybatis的mapper.xml当中用#{}来......