一级缓存:

也称本地缓存,sqlSession级别的缓存。一级缓存是一直开启的;与数据库同一次回话期间查询到的数据会放在本地缓存中。

如果需要获取相同的数据,直接从缓存中拿,不会再查数据库。

一级缓存

1.第一次查询(先到sqlSession中区看看有没有需要的记录,如果没有就去DB中查询,发出sql语句).

2.当执行查询方法时,就会写入一级缓存sqlSession(sqlSession就是一级缓存, HashMap(key–Value))

2,第二次查询,因为是执行相同查询语句,所以直接从一级缓存中获取数据,而发出sql语句去DB查询.

注意:当sqlSession执行增删改的时候,就会清空一级缓存

一级缓存特点

1.和二级缓存不同它不需要配置.默认开启

2.不得不用,无法剔除

3.无法管理一级缓存

flushCache和useCache

flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。

useCache默认为true,表示会将本条语句的结果进行二级缓存。

在insert、update、delete语句时: flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。 useCache属性在该情况下没有。update 的时候如果 flushCache="false",则当你更新后,查询的数据数据还是老的数据。

  一级缓存失效的四种情况:

1、sqlSession不同。

2.sqlSession相同,查询条件不同。因为缓存条件不同,缓存中还没有数据。

3.sqlSession相同,在两次相同查询条件中间执行过增删改操作。(因为中间的增删改可能对缓存中数据进行修改,所以不能用)

4.sqlSession相同,手动清空了一级缓存。

二级缓存:全局缓存;基于namespace级别的缓存。一个namespace对应一个二级缓存。

工作机制:

1.一个会话,查询一条数据,这个数据会被放在当前会话的一级缓存中。

2,如果会话被关闭了,一级缓存中的数据会被保存带二级缓存。新的会话查询信息就会参照二级缓存。

3.sqlSession ====> Employee====>employee

sqlSession ====>DepartmentMapper=====>Department

不同的namespace查出的数据会放在自己对应的缓存中。

效果:查出的数据首先放在一级缓存中,只有一级缓存被关闭或者提交以后,一级缓存数据才会转移到二级缓存

使用步骤:

1.开启全局缓存配置。<settings><setting name="cacheEnabled" value="true"/></settings>

2.因为是namespace级别,需要搭配每个xxxMapper.xml中配置二级缓存<cache></cache>

<cache flushInterval="60000" size="512" readOnly="true" eviction="FIFO" type="" />

eviction:缓存的回收策略:

LRU – 最近最少使用的:移除最长时间不被使用的对象。

FIFO – 先进先出:按对象进入缓存的顺序来移除它们。

SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。

WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

flushInterval:缓存刷新间隔。缓存多久清空一次,默认不清空。设置一个毫秒值。

readOnly:是否只读。true:mybatis认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。

mybatis为了加快获取速度,直接就会将数据在缓存中的引用交给用户。不安全,速度快。

false:mybatis觉得获取的数据可能被修改。mybatis会利用序列化和反序列化的技术克隆一份新的数据给用户。安全,速度快。

size:缓存放多少元素。

type:指定自定义缓存全类名。实现cache接口即可。

3.pojo需要实现序列换接口和缓存相关的配置/属性:

1.cacheEnabled:如果是false,关闭二级缓存,不关闭一级缓存。

2.每个select标签都有userCache="true"属性:对一级缓存没有影响。设置为false,二级缓存失效。

3.每个增删改标签都有flushCache="true"属性:一级缓存和二级缓存都会被清空。

4.在查询标签中flushCache="false"属性:如果设置为true,查完会清空,一级二级缓存都会被清空,都不会用缓存。

5.sqlSession.clearn():跟session有关,只会清除一级缓存。

6.localCacheScope:<settings><setting name="localCacheScope" value="SESSION"/></settings>本地缓存作用域。

一级缓存SESSION:当前会话的所有数据保存到回话缓存中。STATEMENT:禁用一级缓存。

缓存首先一进来去查二级缓存,二级缓存没有去找一级缓存,一级缓存没有去找数据库。二级缓存----->一级缓存-------->数据库。

自定义缓存 implements Cache,重写接口中的保存等方法,比如说保存到redis.

MYSQL缓存:一级缓存和二级缓存相关推荐

  1. Mybatis一级缓存、整合第三方缓存ehcache、Mybatis二级缓存

    8. 缓存 8.1 一级缓存 在对数据库的一次会话中,我们有可能会反复地执行完全相同的查询语句,如果不采取一些措施的话,每一次查询都会查询一次数据库,而我们在极短的时间内做了完全相同的查询,那么它们的 ...

  2. mysql ehcache_MyBatis使用Ehcache作为二级缓存

    特别说明:由于二级缓存是基于Mapper的,当你在不同的mapper中查询了相同的数据,例如不同的Mapper中有多表查询时结果中有相同的数据,当其中一个Mapper进行插入更新缓存时,另一个并没有插 ...

  3. mysql二级缓存redis_SpringBoot+Mybatis+redis(二级缓存)搭建

    刚刚开始接触Spring Boot,因为极简单的配置开发,搭建一个通用的Spring Boot+Mybaitis+redis的开发框架. 一.用maven构建项目,pom.xml文件如下: org.s ...

  4. MyBatis 缓存详解-开启二级缓存的方法

    第一步:在mybatis-config.xml 中配置了(可以不配置,默认是true): <setting name="cacheEnabled" value="t ...

  5. MySQL的一级索引和二级索引介绍,HBase中提到的二级索引【笔记自用】

    1.一级索引 索引和数据存储在一起,都存储在同一个B+tree中的叶子节点.一般主键索引都是一级索引. 2.二级索引 二级索引树的叶子节点存储的是主键而不是数据.也就是说,在找到索引后,得到对应的主键 ...

  6. MySQL的一级索引和二级索引

    导读 本文参考自简书的某位作者,并做了增删.我一般称为"一级索引"和"二级索引",这样好记一点.正确的称谓是:集聚索引和非聚集索引.顾名思义,叶子节点存放主索引 ...

  7. Mybatis一级缓存和二级缓存 Redis缓存

    一级缓存 Mybatis的一级缓存存放在SqlSession的生命周期,在同一个SqlSession中查询时,Mybatis会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个Map对 ...

  8. 458、Java框架112 -【MyBatis - 一级缓存、二级缓存】 2020.12.28

    目录 0.一级缓存 1.在一个Session里查相同id的数据 2.在不同Session里查相同id的数据 3.二级缓存 4.基于前一个知识点 5.观察无二级缓存 6.启动二级缓存 7.在Catego ...

  9. mybatis一级缓存和二级缓存使用详解

    文章目录 一.概念说明 1.一级缓存 2.二级缓存 3.比较 二.mybatis缓存的生命周期 三.一级缓存的使用 四.二级缓存的使用 五.自定义二级缓存 六.mybatis缓存.spring缓存和r ...

最新文章

  1. 图像反光能被一键去除了?港科大开源RFC,仅用一个操作,强反光也能完美去除|CVPR2021...
  2. Linux CentOS 7 YouCompleteMe相关配置。
  3. 关于JSON CSRF的一些思考
  4. 2022虎年背景全新UI头像框制作微信小程序源码
  5. DEL: Open explorer from Console
  6. [Ubuntu] Your Firefox profile cannot be loaded. It may be missing or inaccessible
  7. Python 单元测试
  8. 【web前端技术】dicebear一句话生成头像
  9. 华为手机root过程
  10. 盘点|国产无线通信模块厂,赶紧收藏!
  11. Java并发编程(十七)Java并发包中原子操作类原理
  12. [F2F] Java基础 (JDK特性/集合/IO/锁)
  13. 浅析计算机信息管理系统任务书,计算机工程系学生就业信息管理系统任务书
  14. 100个python算法超详细讲解:邮票组合
  15. Android手机数据读写方法(内部存储、SD卡,网络加载,包内文件读取)
  16. Microsoft Office SharePoint Server 2007的文件目录结构
  17. react-native开发怎样调试网络请求?
  18. x86和x64的意义
  19. 快速读懂云计算,云计算到底是什么?
  20. CENTOS7.6在台式机安装网卡驱动

热门文章

  1. 怎么在照片上添加logo
  2. avue table crud
  3. ASEMI三相整流桥的工作原理
  4. 苹果电脑上下载工具folx的自动化下载功能怎么使用
  5. 拟物风格的小程序附源码
  6. 华为上机【洞穴逃生】
  7. MySQL数据库——数据修改(二)
  8. 云桌面是如何对旧电脑进行利旧升级的
  9. FFMpeg 实现从视频中提取音轨
  10. 滴滴顺风车设计总结(原创文章)