MyBatis-Plus缓存不一致原因解析
MyBatis-Plus缓存导致数据读取不一致的分析本文针对一个MyBatis-Plus前后两次查询结果不一致的问题进行分析,该问...
MyBatis-Plus缓存导致数据读取不一致问题分析及解决方案
本文分析一个MyBatis-Plus查询结果前后不一致的问题:数据库数据已更新,但后续查询仍返回旧数据。例如,第一次查询last值为22,更新为23后能读取到新值,但稍后再次查询却返回22,而几乎同时另一次查询却能正确读取到最新值(例如1048)。这表明问题并非数据库数据一致性问题,而是应用缓存机制导致。
问题表现:数据库数据已更新,但MyBatis-Plus部分查询返回旧数据,部分查询返回新数据,同一时间点查询结果不一致。
可能原因:
- 一级缓存: MyBatis-Plus默认启用一级缓存(基于SqlSession)。如果两次查询使用同一个SqlSession,且未清理缓存(例如
session.clearCache()),第二次查询将读取一级缓存中的旧数据。 - 二级缓存: 如果配置了MyBatis-Plus二级缓存(基于Mapper),缓存未失效,也会导致读取旧数据。
- 数据库连接池: 数据库连接池可能存在缓存机制,导致部分连接获取旧数据。
解决方案:
-
SqlSession管理: 确保每次查询都使用新的SqlSession,或者在更新数据后清理一级缓存。 推荐使用新的SqlSession,避免缓存带来的不确定性。
-
二级缓存配置: 检查是否启用二级缓存。如果启用,评估缓存策略是否合理,必要时调整缓存失效时间或其他策略,甚至考虑禁用二级缓存。
-
数据库连接池配置: 检查数据库连接池配置,确认是否启用缓存,以及缓存策略是否影响数据一致性。 必要时调整连接池配置,或选择不使用缓存的连接池实现。

通过以上排查,即可找到并解决MyBatis-Plus查询结果不一致的根本原因,确保数据读取的一致性。 建议优先检查SqlSession管理,这是最常见且最容易解决的问题。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















