珠海网站外包,网站常用的一种js的图片幻灯片特效代码,网站结构合理,网站建设虚拟主机文章目录 MyBatis缓存的区别是什么作用范围方面有哪些差异生命周期数据进行了存储缓存的优缺点 MyBatis缓存的区别是什么
MyBatis 提供了一级缓存和二级缓存#xff0c;这两者的主要区别在于其作用范围和生命周期。
一级缓存#xff1a;一级缓存是 SqlSession 级别的缓存。… 文章目录 MyBatis缓存的区别是什么作用范围方面有哪些差异生命周期数据进行了存储缓存的优缺点 MyBatis缓存的区别是什么
MyBatis 提供了一级缓存和二级缓存这两者的主要区别在于其作用范围和生命周期。
一级缓存一级缓存是 SqlSession 级别的缓存。当我们执行查询时它就会将查询结果缓存起来。当我们再次查询相同的数据它就会直接从缓存中拉取。一级缓存是默认开启的。一级缓存的生命周期和 SqlSession 保持一致当 SqlSession 被关闭或者清空那么一级缓存就会消失二级缓存二级缓存是命名空间级别的缓存。一个命名空间可以理解为一个 Mapper 文件即一个 XML 文件。不同的 Mapper 文件可以有不同的命名空间即使它们都在同一个项目中。二级缓存是可以被多个 SqlSession 共享的。它的生命周期和应用程序保持一致即应用程序运行期间二级缓存一直存在。当应用程序关闭后二级缓存才会消失
注意使用二级缓存时需要注意其适用场景。如果数据更新非常频繁那么使用二级缓存可能不太合适因为数据即使被更新缓存中的数据也不会被立即清除而是等待应用程序关闭后才会消失。这可能会导致数据不一致的问题。
作用范围方面有哪些差异
MyBatis的一级缓存和二级缓存的作用范围有明显的差异。
一级缓存是SqlSession级别的缓存它的作用范围仅限于当前的SqlSession。也就是说只有同一个SqlSession在执行两次相同的sql时第一次得到的数据才会被缓存起来第二次执行时直接从缓存中获取提高效率。而二级缓存是基于mapper的namespace作用域但多个SqlSession操作同一个namespace下的sql时只要传入的参数相同执行相同的sql语句第一次执行完毕后会自动将sql提交并将数据缓存起来。也就是说二级缓存在多个SqlSession之间共享数据作用范围更广。以上内容仅供参考以MyBatis官方文档为准确 。
生命周期
MyBatis的缓存生命周期主要涉及到一级缓存和二级缓存。
一级缓存的生命周期和SqlSession保持一致。当开启一个新的数据库会话时MyBatis会创建一个新的SqlSession对象其中包含一个用于保存缓存数据的hashMap以对象的id作为key对象作为value保存。当SqlSession执行DMLinsertupdatedelete操作并提交到数据库时MyBatis会清空SqlSession的一级缓存以保存最新的数据并避免脏读现象。如果SqlSession调用close()方法或者clearCache()方法一级缓存中的数据会被释放或者清空。二级缓存的生命周期和应用程序保持一致即应用程序运行期间二级缓存一直存在。二级缓存是mapper级别的缓存使用二级缓存时多个SqlSession使用同一个mapper的sql语句去操作数据库得到的数据存在二级缓存区域。二级缓存的范围更大多个SqlSession可以共用二级缓存
以MyBatis官方文档为准确
数据进行了存储
MyBatis的一级缓存和二级缓存存储的数据主要是查询结果的对象。
具体来说一级缓存存储的是单个SqlSession中查询的数据当同一个SqlSession再次查询相同的数据时可以直接从缓存中获取避免了重复的数据库查询操作提高了效率。而二级缓存存储的是多个SqlSession之间共享的数据当多个SqlSession查询相同的namespace下的数据时只要传入的参数相同执行相同的sql语句第一次执行完毕后会自动将sql提交并将数据缓存起来供其他SqlSession使用避免了重复的数据库查询操作提高了效率。需要注意的是MyBatis的二级缓存只会缓存查询语句而不会缓存更新、插入、删除等语句。同时MyBatis的二级缓存是将查询结果对象序列化后存储在硬盘上读取时需要进行反序列化操作因此在选择二级缓存时需要考虑到序列化和反序列化的开销。
缓存的优缺点
MyBatis 的一级缓存和二级缓存都有其优缺点
优点 一级缓存 减少读数据库的读操作降低数据库压力加快响应速度 二级缓存 实现了缓存数据的共享可控性也更强 缺点 一级缓存 可能造成数据不一致问题增加成本 二级缓存 极大可能会出现错误数据安全使用的条件比较苛刻
MyBatis 的一级缓存和二级缓存都有其各自的优缺点。在选择使用缓存时需要根据具体的应用场景和需求权衡这些优缺点以做出最佳的选择。