求教:MyBatis的缓存到底有用吗?

本文讨论了MyBatis的一级与二级缓存的实际应用情况,指出一级缓存通常在同一请求内使用,而二级缓存由于跨SqlSession且受namespace限制,在多人开发和集群环境中可能导致数据不一致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:一下皆是个人观点,期待各位大佬的指正

今天看了下mybatis的缓存,发现其实这个缓存基本可以说是没有用的

为什么没有用呢?

首先:MyBatis分为一级缓存和二级缓存

一级缓存:存在于SqlSession的生命周期中,什么是SqlSession的生命周期呢,简单的来说,只有同一个请求才会是同一个SqlSession,那么就是说只有同一个请求我查询第二次这个缓存才会生效,那么同一个请求查询两次,那么我就认为你这个代码可能写的有问题,所以一级缓存其实完全没有用处。

二级缓存:存在于SqlSessionFactory 的生命周期中,可以理解为跨sqlSession;缓存是以namespace为单位的,不同namespace下的操作互不影响,但是在多人开发的环境下,我的不同的namespace完全是有可能操作同一张表的,那么会导致一个namespace的数据修改了一张表,但是另一个namespace的那张表的数据缓存没被修改,这样查询的数据就会错误!!!这个还是单节点,集群环境的话,这个问题可能更严重,所以二级缓存是不能使用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值