Mybaits 缓存

作者: 93张先生 | 来源:发表于2020-09-04 18:00 被阅读0次

一级缓存

数据库是比较珍贵的资源,很容易成为整个系统的瓶颈,减少对数据库的直接访问 。使用缓存是一种比较有效的优化手段,使用缓存可以减少应用系统与数据库的网络交互、减少数据库访问次数、降低数据库的负担、降低重复创建和销毁对象等 系列开销,从而提高整个系统的性能。从另一方面来看,当数据库意外岩机时,缓存中保存的数据可以继续支持应用程序中的部分展示的功能,提高系统的可用性。

MyBatis 作为功能强大的 ORM 框架,提供了一级缓存和二级缓存。

一级缓存是会话级别的缓存,在 MyBatis 中每创建一个 SqlSession 对象,就表示开启一次数据库会话。一级缓存是默认开启的。

SqlSession 是通过 Executor 来实现缓存的。Executor 创建一个缓存对象。
缓存的生命周期和 SqlSession 的生命周期相同,也就是和 Executor 对象的生命周期相同。当调用 Executor 的 close() 方法,一级缓存就会被清空。当调用 executor,update() 对象,缓存的也会被清空。

一级缓存的管理

executor 执行 select() 查询,使用缓存过程。


image.png

二级缓存(Global Second Cache)

特征

  • 二级缓存是 SqlSession 之间共享的
  • 二级缓存是以 mapper.xml 的 namespace 为单位进行存储的
  • 生命周期和应用程序的生命周期是一样,是一直存在的
  • 一级缓存是 Session 或者 Statement 级别的缓存

开启二级缓存

  • mybaits-config 文件配置, value 是 true,先决条件,其他二级缓存的配置,才会生效
<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>
  • 各个 mapper.xml 配置的 <cache> or <cache-ref>
<cache readOnly="true"/>
<cache-ref namespace="org.apache.ibatis.domain.blog.mappers.BlogMapper"/>
  • <select> 节点中的 useCache 属性,表示查询结果是否保存到二级缓存中去。
<select id="selectWithOptions" resultType="org.apache.ibatis.domain.blog.Author" flushCache="false" useCache="false">
   select * from author
</select>

一级缓存和二级缓存的关系

image.png

缓存查询流程

二级缓存开启后,同一个namespace下的所有操作语句,都影响着同一个Cache,即二级缓存被多个SqlSession共享,是一个全局的变量。

当开启缓存后,数据的查询执行的流程就是 二级缓存 -> 一级缓存 -> 数据库。

image.png

自定义二级缓存实现

使用自定义缓存,修改 <cache> 标签的 type 类型

<cache type="com.domain.something.MyCustomCache"/>

相关文章

  • Mybaits 缓存

    一级缓存 数据库是比较珍贵的资源,很容易成为整个系统的瓶颈,减少对数据库的直接访问 。使用缓存是一种比较有效的优化...

  • 缓存设计

    目录 缓存设计需要考虑的地方 项目代码编写 mybaits缓存设计原理 guava缓存设计原理 本地缓存设计需要考...

  • 6. MyBatis缓存

    6.1 MyBatis缓存介绍 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。mybaits提供...

  • Mybatis缓存

    mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。mybaits提供一级缓存,和二级缓存。 一级缓存 ...

  • mybatis----缓存

    查询缓存 mybaits提供了一级缓存和二级缓存,用于减轻数据压力,提高数据库性能。。 1.1 什么是一级缓存 我...

  • mybatis 的缓存

    一、前言 因为在做项目时候遇到了mybatis缓存的坑,所以全面学习了下mybaits的缓存知识,一来避免后面再次...

  • Springboot + Mybatis + Redis 实现二

    1.使用redis 实现mybaits 的二级缓存功能:使用Redis实现二级缓存,将运行结果存放在redis当中...

  • mybatis根据不同的主键查询多次,但是查询结果一样的问题

    这个问题是mybaits的的缓存机制导致的,mybatis默认的是会开启一级缓存的,但是当我们在for循环中循环调...

  • mybaits一级缓存失效

    mybatis+spring环境下缓存的使用和mybatis一级缓存失效原因 - CSDN博客

  • Mybaits 框架学习笔记

    Mybaits 框架学习笔记 1. 导入 Mybaits 架包 2. 创建 Mybaits 核心配置文件 在 sr...

网友评论

    本文标题:Mybaits 缓存

    本文链接:https://www.haomeiwen.com/subject/qactektx.html