您的位置:首页 > 新闻 > 热点要闻 > 宁波优化网站排名价格表_手机网站和电脑网站开发_seo优化推广工程师_软文范例大全800

宁波优化网站排名价格表_手机网站和电脑网站开发_seo优化推广工程师_软文范例大全800

2024/12/21 22:54:22 来源:https://blog.csdn.net/gghfzs1/article/details/144618931  浏览:    关键词:宁波优化网站排名价格表_手机网站和电脑网站开发_seo优化推广工程师_软文范例大全800
宁波优化网站排名价格表_手机网站和电脑网站开发_seo优化推广工程师_软文范例大全800

一、二级缓存的概念

  • MyBatis 的二级缓存是基于命名空间(namespace)的缓存,它可以被多个 SqlSession 共享。当开启二级缓存后,在一个 SqlSession 中执行的查询结果会被缓存起来,其他 SqlSession 在查询相同的语句(相同的 namespace + 相同的 SQL 语句 + 相同的参数)时可以直接从缓存中获取数据,从而减少数据库的查询次数,提高性能。

二、二级缓存的配置

<settings><setting name="cacheEnabled" value="true"/>
</settings>

<mapper namespace="com.example.dao.UserDao"><cache eviction="LRU" flushInterval="60000" size="512"/><!-- 这里是SQL语句定义等内容 -->
</mapper>
  • 全局配置:在 MyBatis 的核心配置文件(一般是mybatis-config.xml)中开启二级缓存,通过设置<settings>标签下的cacheEnabled属性为true(默认值就是true)来开启全局的二级缓存功能。例如:
  • Mapper 映射文件配置:在每个需要使用二级缓存的 Mapper 映射文件中,需要在<mapper>标签内添加<cache/>标签来启用该 Mapper 命名空间下的二级缓存。<cache/>标签有一些可选属性,如eviction(缓存回收策略)、flushInterval(缓存刷新间隔)等。例如:
    • 在上述示例中,eviction="LRU"表示使用最近最少使用(Least Recently Used)策略来回收缓存;flushInterval="60000"表示缓存将每隔 60 秒刷新一次;size = "512"表示缓存最多可以存储 512 个对象。

三、二级缓存的工作原理

  • 当一个 SqlSession 执行查询操作时,MyBatis 首先会查看一级缓存(SqlSession 级别的缓存)中是否存在所需数据。如果一级缓存中没有,并且二级缓存是开启的,它会去查看二级缓存。
  • 如果二级缓存中有符合条件的数据(根据 namespace、SQL 语句和参数来判断),就直接从二级缓存中获取数据,并将数据放入一级缓存中,供当前 SqlSession 后续使用。
  • 如果二级缓存中也没有,就会执行数据库查询操作,将查询结果放入一级缓存,同时如果二级缓存配置允许,也会将数据放入二级缓存,以便其他 SqlSession 使用。

四、二级缓存的适用场景和限制

  • 适用场景:适用于数据变化频率较低、对查询性能要求较高的场景。例如,系统中的字典表(如国家代码表、行业分类表等)数据一般很少变化,使用二级缓存可以有效减少数据库查询,提高系统性能。
  • 限制
    • 缓存是以命名空间为单位的,不同命名空间下的缓存是相互独立的。如果多个 Mapper 文件对同一张表进行操作,但处于不同的命名空间,可能会导致缓存不一致的情况。
    • 当数据库中的数据发生变化时,需要手动或通过配置合适的缓存刷新策略来更新缓存。如果缓存更新不及时,可能会导致读取到脏数据。

五、与一级缓存的对比

  • 一级缓存:是 SqlSession 级别的缓存,在一个 SqlSession 的生命周期内有效。当 SqlSession 关闭后,一级缓存就会被清空。它的作用范围相对较小,主要用于减少在同一个 SqlSession 中重复查询相同数据的数据库访问次数。
  • 二级缓存:范围更大,是基于命名空间的,可以被多个 SqlSession 共享。它的生命周期相对较长,在合适的配置下可以在多个请求之间共享缓存数据,从而提供更高效的缓存机制,但配置和管理相对复杂一些。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com