MyBatis缓存
介绍:
正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持。
- 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空。
- 二级缓存与一级缓存其机制相同,默认也是采用 PerpetualCache,HashMap存储,不同在于其存储作用域为 Mapper(Namespace),并且可自定义存储源,如 Ehcache。
- 对于缓存数据更新机制,当某一个作用域(一级缓存Session/二级缓存Namespaces)的进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被clear。
一级缓存:
- MyBatis的一级缓存指的是在一个Session域内,session为关闭的时候执行的查询会根据SQL为key被缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效)
- 一级缓存是默认开启的,由于我们在使用的过程中会交给spring进行管理session。在进行操作时,spring会自动开启、关闭session。所以在项目有没有使用到一级缓存。
- 由于没有使用到,这次就没有对一级缓存进行测试。
二级缓存:
- MyBatis的二级缓存需要手动开启。它的作用域是
- 在MyBatis配置文件中加入
<setting name="cacheEnabled" value="true"/>
- 在对应的Mapper.xml中也需要开启
<cache eviction="FIFO" <!--回收策略为先进先出--> flushInterval="60000" <!--自动刷新时间为60s--> size="512" readOnly="true" />
- 在对MyBatis的二级缓存测试时,我们需要在查询的时候打印mysql日志。
- 首先要保证所需要的jar存在,slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar slf4j-simple-1.6.1.jar 三个jar要保持版本的一致。
- 把log的日志级别调到debug,并加入以下配置
log4j.logger.java.sql.ResultSet=INFO log4j.logger.org.apache=INFO log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG
- 测试查询结果,第一次出现了查询语句,当再次查询时,将不发出查询语句。
==> Preparing: select id, name, pid, url, type,creater,modifier,create_time,modify_time,deleteState from menu where 1=1 and deletestate='0' and pid = '0' | ooo Using Connection [com.mchange.v2.c3p0.impl.NewProxyConnection@293354] | ==> Parameters: | ==> Preparing: select id, name, pid, url, type,creater,modifier,create_time,modify_time,deleteState from menu where 1=1 and deletestate='0' and pid = '0' | ==> Parameters: | <== Total: 3 | <== Total: 3 |
总结:
- 在使用二级缓存时,需要保证这个namespace中所操作的表不能在其它namespace中进行更新操作。(只有这样才能保持数据的一致性)
- 在进行insert、update、delete操作时,会清处当前namespace下的所有缓存。
- 如果有两个namespace对同一张表有更新操作,那么就会造成数据的不一致性。
相关推荐
Mybatis缓存机制是数据库操作中的重要组成部分,它能够提高数据访问效率,减少对数据库的重复查询。在Mybatis中,缓存分为一级缓存和二级缓存,这两种缓存各有其特点和应用场景。 一级缓存是SqlSession级别的缓存,...
缓存是MyBatis性能优化的重要手段,分为一级缓存和二级缓存。在这篇文章中,我们将深入探讨这两个级别的缓存机制及其工作原理。 **一级缓存** 一级缓存是SqlSession级别的缓存,也称为局部缓存。当你执行一个查询...
mybatis支持缓存,如果我们查找数据库中某一条记录时,先从缓存中获取,如果缓存中不存在该记录,则从数据库中获取,在放入到缓存中。该文档是关于mybatis使用一级或二级缓存的介绍
在这个“Mybatis缓存测试示例”中,我们将深入探讨Mybatis的缓存机制,以及如何在实际项目中进行测试。 Mybatis 的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的,同一SqlSession内的多次相同查询会复用...
本教程“Mybatis系列教程Mybatis缓存共17页”旨在深入解析Mybatis的缓存功能。 在Mybatis中,缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的,同一个SqlSession内的多次相同查询会复用第一次查询的结果,...
在这篇文档《Mybatis缓存开源架构源码2021》中,很可能会深入探讨这两级缓存的工作原理和实现。 首先,一级缓存是 SqlSession 级别的,基于 HashMap 实现。当我们在一个 SqlSession 中执行了查询操作,结果会被缓存...
#### 一、MyBatis缓存机制概述 在MyBatis中,缓存是一项重要的性能优化措施。它能够显著减少数据库的访问次数,提高应用程序的响应速度。MyBatis提供了两种级别的缓存支持:一级缓存和二级缓存。 - **一级缓存**:...
标题 "mybatis 缓存的简单配置" 涉及的是MyBatis框架中的缓存机制,这是一个关键特性,用于提升数据库操作的效率。MyBatis的缓存分为一级缓存和二级缓存,它们各自有不同的作用和实现方式。 一级缓存是SqlSession...
通过对MyBatis缓存机制的深入理解,开发者可以更有效地利用缓存提升应用性能,同时避免并发控制和数据一致性的问题。通过自定义缓存策略,还可以根据项目需求调整缓存的行为,比如使用更复杂的排除算法或调整缓存...
Mybatis 缓存原理及失效情况解析 Mybatis 缓存是指将经常查询的数据存于内存中,以提高查询效率,解决高并发系统的性能问题。Mybatis 缓存分为一级缓存和二级缓存两种。 一级缓存,也称为本地缓存,指的是...
本篇笔记将深入探讨MyBatis的缓存机制,包括一级缓存和二级缓存的概念、工作原理、配置与使用。 一级缓存是SqlSession级别的缓存,每当执行一个SQL查询时,如果结果不在缓存中,MyBatis会将其放入一级缓存。当同一...
在处理大量数据时,为了提高性能,MyBatis引入了缓存机制。缓存可以分为一级缓存和二级缓存,它们在不同的范围内存储和复用已查询过的数据,避免重复的数据库访问。 一级缓存是SqlSession级别的,它是默认开启的。...
MyBatis缓存功能原理及实例解析 MyBatis缓存功能原理及实例解析是MyBatis框架中非常重要的一部分,它可以极大的提升查询效率,解决高并发系统的性能问题。缓存机制可以将用户经常查询的数据放在缓存(内存)中,...
本篇文章将详细探讨MyBatis的缓存机制,包括一级缓存和二级缓存,以及如何将MyBatis与第三方缓存EhCache进行整合。 首先,我们来了解一级缓存。一级缓存是SqlSession级别的,也称为本地缓存。当我们在一个...
个人学习mybatis源码总结
2. 分布式环境下的缓存:在分布式系统中,二级缓存可能导致数据冲突,这时可以考虑使用分布式缓存解决方案,如Redis或Memcached,配合MyBatis的插件实现分布式缓存。 3. 缓存穿透和缓存雪崩:缓存穿透是指查询的...
MyBatis提供了两种级别的缓存:一级缓存(本地缓存)和二级缓存(全局缓存)。 一级缓存是SqlSession级别的,它默认始终开启。当在一个SqlSession中执行SQL查询时,查询结果会被存储在本地缓存中。如果后续请求相同...
#### 一、Mybatis缓存机制概述 Mybatis提供了一级缓存和二级缓存两种缓存机制,这两种缓存机制有助于提高数据访问的效率。 **1.1 一级缓存** 一级缓存是在同一个`SqlSession`生命周期内的缓存机制,它基于Per ...
标题中的“mybatis二级缓存”指的是MyBatis框架中的一个重要特性,它是MyBatis缓存机制的一部分,用于提升数据库查询效率。MyBatis一级缓存是SqlSession级别的,而二级缓存则是在整个Mapper配置范围内的全局缓存,...