mybatis的二级缓存

杀手不太冷!      2022-04-24     670

关键词:

文章目录

MyBatis的二级缓存

MyBatis默认是开启一级缓存的

MyBatis默认开启了一级缓存,但是它的一级缓存的作用域是同一个SqlSession对象,就是说只有当两个sql语句完全一样,并且都是通过同一个SqlSession对象操作数据库的时候,MyBatis的一级缓存才会生效,当执行一个和前面完全一样的sql语句的时候,这样就不会重新连接数据库从磁盘中取数据了,而是从一级缓存中(内存中)直接取数据。

但是一级缓存不实用,因为我们调用同一个动态代理接口的方法的时候,每次调用一个方法无论相同不相同都会重新创建一个SqlSession对象。因此我们在实际项目中基本上用不到一级缓存,如果想要提高数据库的查询性能,需要用二级缓存。

开启MyBatis的二级缓存

为什么要开启二级缓存

为什么要开启MyBatis的二级缓存呢?看下面的这个图:

就是当调用同一个动态代理接口的同一个方法两次的时候,其实是会创建两个SqlSession对象操作数据库,所以一级缓存是不起作用的,这个时候我们就需要开启二级缓存了。

在mybatis的配置文件中进行配置

在对应的mapper映射文件中声明

想要给哪个动态代理接口开启二级缓存,就在哪个对应的mapper映射文件中声明一下,如下图:

相关的DO对象需要实现序列化

测试

首先启动项目,然后连续访问这个项目中的/query接口两次,如下图:

动态代理接口执行更新方法后会清空对应的二级缓存

比如:

goodsMapper动态代理接口相关的二级缓存中有条数据[Student:(id:1,name:“zs”)],现在我们更新了数据库中的相关数据为[Student:(id:1,name:“ls”)],那么我们假如没有清空二级缓存,下次再查询id为1的学生的时候,因为sql语句和之前的一样,那么就会去二级缓存中查找,这时候查找到的就是[Student:(id:1,name:“zs”)],但是此时这个数据是错误的,因为我们数据库中已经更新了这条数据为[Student:(id:1,name:“ls”)]。因此动态代理接口每次进行完更新操作之后都刷新二级缓存清空里面的数据,这是非常合理的。

使用二级缓存的好处

可以提高数据库的查询性能,优化数据库的查询操作,提高性能。就是,使用缓存可以把数据库的查询结果存储在内存中,这样如果下次我们进行相同的查询的时候,就不用连接数据库读取电脑磁盘中的数据了,而可以直接通过内存读取数据。

23mybatis学习——mybatis的二级缓存

MyBatis一级缓存最大的共享范围就是一个SqlSession内部,那么如果多个SqlSession需要共享缓存,则需要开启二级缓存,开启二级缓存后,会使用CachingExecutor装饰Executor,进入一级缓存的查询流程前,先在CachingExecutor进行二级缓存的查... 查看详情

mybatis学习13mybatis中的二级缓存

1.二级缓存的原理  前面介绍了,mybatis中的二级缓存是mapper级别的缓存,值得注意的是,不同的mapper都有一个二级缓存,也就是说,不同的mapper之间的二级缓存是互不影响的。为了更加清楚的描述二级缓存,先来看一个示意图... 查看详情

《深入理解mybatis原理7》mybatis的二级缓存的设计原理

《深入理解mybatis原理》MyBatis的二级缓存的设计原理MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能。本文将全面分析MyBatis的二级缓存的设计原理。1.MyBatis的缓存机制整体设计以及二... 查看详情

mybatis学习记录5mybatis的二级缓存

 主题  之前学习了一下MyBatis的一级缓存,主要涉及到BaseExecutor这个类.现在准备学习记录下MyBatis二级缓存. 配置二级缓存与初始化发生的事情首先二级缓存默认是不开启的,需要自己配置开启.如上图,需要在configuration里去... 查看详情

mybatis缓存

mybatis的延迟加载和缓存技术开始 mybatis一级缓存  mybatis的二级缓存mybatis默认是没有开启二级缓存的。 开启二级缓存需要在mybatis的全局配置文件sqlMapConfig.xml中加入 除了开启二级缓存开关外,还需要在各自的map... 查看详情

mybatis——一级缓存二级缓存

一、Mybatis缓存●MyBatis包含一个非常强大的查询緩存特性,它可以非常方便地定制和配置缓存。绶存可以极大的提升查询效率。●MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存  ○ 默认情况下,只有一级缓存开启... 查看详情

mybatis缓存之二级缓存

二级缓存(全局缓存):基于namespace级别的缓存,一个namespace对应一个二级缓存。工作机制:一个会话,查询一条数据,这条数据会放在当前会话的一级缓存中;如果会话关闭,该会话对应的一级缓存就消失了;可以使用二级缓... 查看详情

mybatis0209二级缓存

1.1二级缓存1.1.1原理mybatis和spring整合后一级缓存就没有了,sqlSession在不关闭的前提下2次查询就会从缓存中取,一级缓存缓存在sqlSession对象里面,当多用户查询的时候就用到二级缓存了。UserMapper缓存:会把根据id和根据name查询... 查看详情

mybatis一级缓存与二级缓存

MyBatis一级缓存  MyBatis一级缓存默认开启,一级缓存为Session级别的缓存,在执行以下操作时一级缓存会清空  1.执行session.clearCache();  2.执行CUD操作  3.session.close();//不是同一个Session对象了 MyBatis二级缓存  需要配... 查看详情

mybatis缓存专题-一文彻底搞懂mybatis二级缓存(代码片段)

...属性3.1.type3.2.eviction3.3.flushInterval3.4.size3.5readOnly3.6blocking4.MyBatis的缓存机制整体设计以及二级缓存的工作模式5.使用二级缓存,必须要具备的条件6.一级缓存 查看详情

mybatis源码分析五mybatis的缓存

五、MyBatis缓存文章目录五、MyBatis缓存缓存的概念与应用缓存的概念开发一个简单的缓存MyBatis中的缓存设计自定义一个Cache实现类MyBatis中的Cache实现类PerpetualCache装饰器CacheCache如何在MyBatis运行过程应用MyBatis缓存的二层体系一级... 查看详情

mybatis源码分析五mybatis的缓存

五、MyBatis缓存文章目录五、MyBatis缓存缓存的概念与应用缓存的概念开发一个简单的缓存MyBatis中的缓存设计自定义一个Cache实现类MyBatis中的Cache实现类PerpetualCache装饰器CacheCache如何在MyBatis运行过程应用MyBatis缓存的二层体系一级... 查看详情

mybatis缓存的使用和源码分析

Mybatis缓存使用在Mybatis中缓存分为一级缓存和二级缓存,二级缓存又称为全局缓存,默认一级缓存和二级缓存都是开启的,只是二级缓存的使用需要配置才能生效,在Mybatis中一级缓存是SqlSession级别也就是会话级别的,而二级缓... 查看详情

mybatis框架查询缓存-二级缓存原理

二级缓存原理1.原理首先看图首先开启mybatis的二级缓存。sqlSession1去查询用户id为1的用户信息,查询到用户信息会将查询数据存储到二级缓存中。如果SqlSession3去执行相同mapper下sql,执行commit提交,清空该mapper下的二级缓存区域... 查看详情

mybatis缓存,包含一级缓存与二级缓存,包括ehcache二级缓存

...了提高性能。明白了这一点下面我们开始进入正题。二,mybatis缓存概要①、mybatis的缓存有两种,分别是一级缓存和二级缓存。两者都属于查询缓存,也就是只有执行查询操作的时候才起缓存作用,对于增删改操作无效。②、一... 查看详情

mybatis一级缓存和二级缓存

MyBatis中的缓存一级缓存:  Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中执行两次相同的SQL语句,第一次执行完毕后会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据不再从数据库中查询... 查看详情

mybatis-一级缓存与二级缓存

 1.1  什么是查询缓存mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。mybaits提供一级缓存,和二级缓存。 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个(内存区... 查看详情

mybatis之二级缓存

 下面是二级缓存机制的样例:  查看详情