MyBatis-Plus查询结果前后不一致,是什么原因导致的?

mybatis-plus缓存导致查询结果不一致问题分析

本文分析一个MyBatis-Plus查询结果前后不一致的问题。问题现象:数据库字段last值更新后,第一次查询读取到新值,但稍后第二次查询却读取到旧值,之后再次查询又读取到最新值。

MyBatis-Plus查询结果前后不一致,是什么原因导致的?

日志显示关键信息:

第一次查询 (17:49:09.423): last值为22,随后更新为23,并立即读取到last = 23第二次查询 (17:50:00.010): last值异常地回退到22。第三次查询 (17:50:00.012): last值正确读取到最新值1048。

此现象很可能是由MyBatis-Plus的缓存机制引起。MyBatis-Plus默认使用一级缓存(SqlSession级别)和二级缓存(Mapper级别)。

如果使用了二级缓存,且缓存失效策略不当,更新数据后,第二次查询可能从缓存读取旧数据,而非数据库最新数据。这解释了为何第二次查询结果为last = 22,即使last值已更新多次并达到1048。之后缓存失效或被清除,第三次查询才读取到最新数据。

蓝心千询 蓝心千询

蓝心千询是vivo推出的一个多功能AI智能助手

蓝心千询 34 查看详情 蓝心千询

数据库事务隔离级别也可能导致问题,但日志显示两次查询时间间隔表明第一个事务已提交,因此该因素可能性较小。

解决方法

建议检查MyBatis-Plus缓存配置,考虑以下方案:

关闭二级缓存: 这是最直接的解决方法,可以有效避免缓存导致的数据不一致。调整缓存失效策略: 如果需要保留二级缓存,则需调整缓存失效策略,例如缩短缓存有效时间或使用更合适的失效策略。检查并发问题: 排查代码中是否存在并发访问数据库的情况,例如多个线程同时更新同一数据。

如果以上方法仍无法解决问题,则需要进一步检查数据库事务隔离级别设置以及代码中其他潜在问题。

以上就是MyBatis-Plus查询结果前后不一致,是什么原因导致的?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/350697.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月5日 22:09:51
下一篇 2025年11月5日 22:11:15

相关推荐

发表回复

登录后才能评论
关注微信