java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Mybatis缓存

Mybatis详细对比一级缓存与二级缓存

作者:Decade0712

MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制,缓存可以极大的提升查询效率。MyBatis中默认定义了两级缓存,分别是一级缓存和二级缓存

基本要点

1、缓存

什么是缓存?

存在内存中的临时数据,我们可以把用户经常查询的数据存放到缓存中,当用户重复查询时,我们可以直接从缓存中查询,提高查询效率,可以解决高并发系统的性能问题

为什么使用缓存?

减少和数据库交互次数,减轻数据库的压力,提高系统效率

什么样的数据能使用缓存?

经常查询且不经常改变的数据

2、一级缓存(默认开启,无法关闭)

1)一级缓存的有效区间是sqlSession从创建到关闭的过程

假设我们重复执行同一条查询语句,如下图所示

我们可以看出,程序只会连接数据库查询一次,后面的查询结果都从缓存中取出

2)一级缓存失效的几种情况

3、二级缓存

1)定义

二级缓存是基于namespace级别的缓存,可以理解为单个Mapper级别的缓存

建议将SQL映射文件涉及到的实体类序列化,即实现Serializable接口,防止出现报错

2)工作机制

3)开启步骤:

首先去mybatis-config.xml中开启全局缓存

<settings>
    <setting name="cachaEnable" value="value"/>
</setting>

在SQL映射文件文件中启用全局的二级缓存

如下,我们创建了一个清除策略为 FIFO 的缓存,每隔 60 秒刷新

最多可以存储结果对象或列表的 512 个引用,返回的对象被认为是只读的

如果不需要参数,直接使用<cache/>即可

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

4)缓存的几种清除策略(主要了解以下2种)

4、缓存查询原理

我们的查询请求会先去二级缓存中查看有没有数据

如果没有,就会去一级缓存中查有没有

如果都没有,再连接数据库查询

到此这篇关于Mybatis详细对比一级缓存与二级缓存的文章就介绍到这了,更多相关Mybatis缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文