前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java小白学习MyBatis:一级、二级缓存是什么?

Java小白学习MyBatis:一级、二级缓存是什么?

作者头像
用户1289394
发布2023-08-22 16:55:59
2030
发布2023-08-22 16:55:59
举报
文章被收录于专栏:Java学习网Java学习网

MyBatis是一款流行的Java持久化框架,它可以通过缓存提高应用程序的性能与响应速度。在MyBatis中,有一级、二级缓存两种缓存机制,下面将简要介绍它们的概念以及实现原理。

一级缓存(Local Cache) 一级缓存又称为本地缓存,是指在MyBatis默认情况下开启的缓存机制。当我们向数据库发出查询请求时,MyBatis会将查询结果缓存到内存中,这样当我们再向同一个SQL发送相同的查询请求时,就不需要再次访问数据库了,而是直接从内存中获取数据并返回结果。这样可以有效减少数据库I/O操作,提高系统响应速度。

一级缓存是映射器作用域的缓存,其生命周期与SqlSession相同。即在同一个SqlSession中查询相同的数据,第一次查询后将数据缓存到内存中,在下一次查询该数据时先从一级缓存中获取。

MyBatis一级缓存的实现原理:MyBatis使用HashMap来实现一级缓存,其中键值对分别为sql语句和执行后的结果。每个Mapper都维护自己的一个缓存Map, 这个缓存Map是由BaseExecutor对象负责管理和维护。这个缓存只能在当前SqlSession中使用,SqlSession结束时缓存也会随着被清空。

二级缓存(Global Cache) 由于一级缓存是与SqlSession相关的,因此有些查询操作需要多次发送SQL请求,这样就无法从缓存中获取数据了。为了解决这种情况,MyBatis提供了另一种缓存机制——二级缓存。

二级缓存是共享的缓存,可以被多个SqlSession对象共享,即多个Mapper实例之间可以共享同一个缓存。其生命周期与整个应用程序相同,当应用程序关闭或用户手动清除缓存时,才会被清空。

MyBatis二级缓存的实现原理:MyBatis使用自定义的缓存实现来支持二级缓存。具体地,MyBatis默认使用PerpetualCache来实现二级缓存。PerpetualCache是MyBatis提供的一个永久性缓存组件,它类似于HashMap,可以对缓存进行管理、添加、移除和清空等操作。每个Mapper也都维护有自己的一个缓存,这个缓存是由CacheExecutor负责管理和维护。

在mapper映射文件中配置二级缓存:

代码语言:javascript
复制
<cache type="org.mybatis.caches.ehcache.EhcacheCache" />

在上述配置中,我们使用EhcacheCache作为Mybatis的二级缓存实现类。

需要注意的是,在使用MyBatis时,我们应该谨慎地使用一级和二级缓存。如果我们采用了错误的缓存策略,可能会导致程序性能下降、数据不一致等问题。因此,我们需要结合具体业务场景来选择合适的缓存方式,并进行适当的配置和优化,以提高系统稳定性和鲁棒性。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档