彻底搞懂Mybatis缓存机制

简介: 彻底搞懂Mybatis缓存机制

Mybatis有哪些缓存机制?


image.png


如图Mybaits里面设计了二级缓存,来提升数据的一个检索效率,也就是避免每一次数据的检索都去查询数据库,一级缓存是SqlSession级别的一个缓存,也叫本地缓存,因为每一个用户在执行查询的时候,都需要使用SqlSession来执行,为了避免每一次都去查询数据库,Mybatis把查询出来数据,缓存到SqlSession的本地缓存里面,后续的Sql如果在命中缓存的情况下,就可以从本地缓存去读取这样一个数据


如果想要去实现跨SqlSession级别的一个缓存,那么一级缓存是无法做到的,因此在Mybatis里面引入了二级缓存的一个设计,也就是当多个用户在查询数据的时候,只要有任何一个SqlSession拿到了数据,就会放入到二级缓存里面,那么其它的SqlSession可以直接从二级缓存里面去加载数据。



Mybatis一二级缓存实现原理?


(1)一级缓存

image.png

如图,一级缓存实现原理,在SqlSession里面会持有一个Executor,每一个exactly里面会有一个叫LocalCache的一个对象,当用户发起查询的时候,Mybatis会去根据执行语句在LocalCache里面去查找,如果命中了就直接把这个数据返回,如果没有命中,再去数据库去查询出来,再写入到LocalCache里面,所以一级缓存的生命周期是SqlSession,需要注意,在多个SqlSession或者分布式环境下可能会因为一级缓存导致一个脏读的问题


(2)一级缓存

image.png

如图,二级缓存的实现原理,是在原来的Executor上去做了一个装饰,引入了叫CachingExecutor这样一个装饰器,所以在进入一级缓存查询之前,会先通过CachingExecutor进行二级缓存的查询,开启二级缓存之后呢,会被多个SqlSession共享,所以它是一个全局的缓存,所以它的查询流程,就变成了先查二级缓存,再来查一级缓存,然后再去查数据库,另外,Mybatis的耳机线缓存相对一级缓存来说,它实现了SqlSession之间缓存数据的一个共享,同时缓存粒度也能够控制到namespace一个级别,并且还可以通过Cache这样一个接口,来实现不同缓存实现类的一个组合,对Cache的可控性也更高了。



相关文章
|
3月前
|
缓存 Java 数据库连接
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
文章介绍了MyBatis的缓存机制,包括一级缓存和二级缓存的配置和使用,以及如何整合第三方缓存EHCache。详细解释了一级缓存的生命周期、二级缓存的开启条件和配置属性,以及如何通过ehcache.xml配置文件和logback.xml日志配置文件来实现EHCache的整合。
mybatis复习05,mybatis的缓存机制(一级缓存和二级缓存及第三方缓存)
|
4月前
|
缓存 应用服务中间件 nginx
Web服务器的缓存机制与内容分发网络(CDN)
【8月更文第28天】随着互联网应用的发展,用户对网站响应速度的要求越来越高。为了提升用户体验,Web服务器通常会采用多种技术手段来优化页面加载速度,其中最重要的两种技术就是缓存机制和内容分发网络(CDN)。本文将深入探讨这两种技术的工作原理及其实现方法,并通过具体的代码示例加以说明。
423 1
|
1月前
|
SQL Java 数据库连接
Mybatis架构原理和机制,图文详解版,超详细!
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。本文详细解析了MyBatis的架构原理与机制,帮助读者全面提升对MyBatis的理解和应用能力。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Mybatis架构原理和机制,图文详解版,超详细!
|
18天前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
13天前
|
缓存 Java 数据库连接
MyBatis缓存机制
MyBatis提供两级缓存机制:一级缓存(Local Cache)默认开启,作用范围为SqlSession,重复查询时直接从缓存读取;二级缓存(Second Level Cache)需手动开启,作用于Mapper级别,支持跨SqlSession共享数据,减少数据库访问,提升性能。
24 1
|
17天前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
34 4
|
1月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
1月前
|
SQL 缓存 Java
MyBatis如何关闭一级缓存(分注解和xml两种方式)
MyBatis如何关闭一级缓存(分注解和xml两种方式)
69 5
|
2月前
|
缓存 Java 数据库连接
使用MyBatis缓存的简单案例
MyBatis 是一种流行的持久层框架,支持自定义 SQL 执行、映射及复杂查询。本文介绍了如何在 Spring Boot 项目中集成 MyBatis 并实现一级和二级缓存,以提高查询性能,减少数据库访问。通过具体的电商系统案例,详细讲解了项目搭建、缓存配置、实体类创建、Mapper 编写、Service 层实现及缓存测试等步骤。
|
2月前
|
存储 缓存 负载均衡
Nginx代理缓存机制
【10月更文挑战第2天】
97 4