当前位置: 首页 > news >正文

昆山app网站制作智能工程学院

昆山app网站制作,智能工程学院,网线制作总结,shopify和wordpress大家好,我是锋哥。今天分享关于【MyBatis一二级缓存的区别?】面试题。希望对大家有帮助; MyBatis一二级缓存的区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 的缓存机制分为 一级缓存 和 二级缓存&…

大家好,我是锋哥。今天分享关于【MyBatis一二级缓存的区别?】面试题。希望对大家有帮助;

MyBatis一二级缓存的区别?

1000道 互联网大厂Java工程师 精选面试题-Java资源分享网

MyBatis 的缓存机制分为 一级缓存二级缓存,它们在作用范围和存储位置等方面有一些显著的区别。以下是它们的详细区别:

1. 一级缓存(Local Cache)

  • 作用范围:一级缓存是与 SqlSession 绑定的缓存。每次创建 SqlSession 时,都会为该 SqlSession 分配一个一级缓存,生命周期仅限于该 SqlSession。也就是说,只要 SqlSession 没有关闭,缓存的数据就会存在;一旦 SqlSession 关闭,缓存数据就会丢失。

  • 存储位置:一级缓存存储在 SqlSession 内部,是本地缓存。

  • 工作方式:如果在同一个 SqlSession 中多次查询相同的数据,MyBatis 会先从一级缓存中查找数据,如果缓存中有数据,就直接返回,而不会执行数据库查询。如果缓存中没有数据,才会执行 SQL 查询并将结果缓存到一级缓存中。

  • 清空机制:一级缓存会在以下情况下被清空:

    • 执行了 commit() 或 rollback()
    • SqlSession 被关闭。
    • 手动调用 clearCache() 清空缓存。
  • 优点:由于一级缓存与 SqlSession 绑定,它的数据访问速度非常快,且不会产生额外的存储消耗。

  • 缺点:只能在同一个 SqlSession 内共享缓存,因此不适用于跨 SqlSession 的缓存共享。

2. 二级缓存(Global Cache)

  • 作用范围:二级缓存是与 SqlSessionFactory 绑定的缓存。也就是说,二级缓存可以跨多个 SqlSession 共享,整个应用程序可以共享二级缓存中的数据。它的生命周期与 SqlSessionFactory 关联,只要 SqlSessionFactory 存在,二级缓存就会存在。

  • 存储位置:二级缓存通常存储在内存中,但它也可以配置为使用外部缓存(如 Redis、Ehcache 等)。

  • 工作方式:二级缓存是在多个 SqlSession 之间共享的。当在一个 SqlSession 执行查询时,MyBatis 会先查询一级缓存,如果没有找到,再查询二级缓存。如果二级缓存也没有找到数据,才会执行数据库查询并将查询结果存储到二级缓存中,供其他 SqlSession 共享。

  • 清空机制:二级缓存的清空机制比较复杂,通常在以下情况下会清空:

    • 数据库表中的数据发生变化时,执行了增删改操作。
    • SqlSessionFactory 重新加载或刷新时。
    • 手动调用 clearCache() 清空缓存。
  • 优点:由于二级缓存可以跨多个 SqlSession 共享,因此可以大大提高跨会话的数据读取效率,减少数据库的访问压力。

  • 缺点:二级缓存的存储和清空机制更加复杂,需要进行配置,并且可能会引入一些同步问题(例如数据一致性问题)。

3. 一级缓存和二级缓存的关系

  • 级别差异:一级缓存是局部缓存,只作用于当前 SqlSession,而二级缓存是全局缓存,作用于整个 SqlSessionFactory

  • 缓存命中顺序:MyBatis 的缓存机制是按照优先级顺序访问的,即:查询数据时,首先会查询一级缓存,如果一级缓存没有,再查询二级缓存。如果二级缓存也没有,才会进行数据库查询。

  • 缓存一致性:一级缓存是由 SqlSession 管理的,不会跨 SqlSession,因此不存在一致性问题。而二级缓存是跨 SqlSession 的共享缓存,在分布式或多线程环境下需要特别小心缓存一致性问题,可能需要引入外部缓存框架来处理。

4. 配置二级缓存

二级缓存需要通过配置文件显式开启并配置。在 MyBatis 的 XML 配置文件中,你需要做以下几步:

  1. 开启二级缓存: 在 mybatis-config.xml 文件中设置 <setting name="cacheEnabled" value="true"/>

  2. 在 Mapper 文件中启用缓存: 每个 Mapper 文件中的 <mapper> 元素需要添加 <cache/> 元素来启用二级缓存。

    <mapper namespace="com.example.mapper.UserMapper"><cache/><!-- 其他映射语句 -->
    </mapper>
    

  3. 配置缓存的实现类: 可以选择默认的缓存实现(如 PerpetualCache),也可以使用外部的缓存库(如 Ehcache)。

    <settings><setting name="cacheImplementation" value="org.mybatis.caches.ehcache.EhcacheCache"/>
    </settings>
    

  4. 缓存的清理策略: 你可以使用 flushCache 属性来控制缓存清理策略。

总结

  • 一级缓存:是基于 SqlSession 的局部缓存,生命周期短,性能高,但不能跨会话共享数据。
  • 二级缓存:是基于 SqlSessionFactory 的全局缓存,跨多个 SqlSession 共享数据,适合于跨会话的数据复用,但需要配置和管理。

通过合理地配置和使用一级缓存和二级缓存,可以有效地提升 MyBatis 的性能,减少不必要的数据库查询操作。

http://www.yayakq.cn/news/749618/

相关文章:

  • 沈阳便宜做网站的知名平面广告设计公司
  • 网站开发协议百度广州网站订制开发
  • 怎么用自己的服务器做网站网站该怎么做链接
  • 一个网站两个空间石家庄兼职做网站
  • 北京市网站备案动力做网站
  • 为何建设银行网站无法登陆网站营销推广公司
  • 公司没网站怎么做dspwordpress phpwamp
  • 论坛网站开发框架angular公众号申请
  • 主题公园网站建设wordpress在国内很慢
  • 宜昌 房地产网站建设企业网站创建的步骤
  • 肇庆网站建设方案咨询网络推广公司运营
  • 石河子网站设计佛山网站优化排名推广
  • 教做鞋的网站武昌手机网站
  • 做外贸网站推广广州网站设计培训
  • 光明新区住房和建设局 官方网站sentos上部署.net网站
  • 贵阳商城网站开发网站开发中如何实现gps定位
  • 哪个网站做ppt赚钱向公司申请建设网站申请书
  • 怎么做浏览网站的小程序湖南网站推广优化
  • 使用cnnic证书的网站整合营销英文
  • 龙泉市建设局网站青岛网站建设开发外包
  • vue小程序开发教程深圳谷歌seo培训班
  • 淘宝客网站做的好的免费已备案二级域名网站
  • 建设个人网站的要求用html
  • 深圳市做网站的有那些公司网站开发语言有php
  • 软件营销网站团购网站模板
  • dede网站优化唐山网站开发公司
  • 网站右下角视频代码ico加网站
  • 博物馆设计公司排名优化网站建设哪家专业
  • 自己做qq代刷网站要钱吗惠州人才市场最新招聘信息网
  • 何为门户网站最新国内新闻50条简短