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

建设机械网站平台住房及城乡建设部网站九大员

建设机械网站平台,住房及城乡建设部网站九大员,用动易建设网站,农业网站怎么做百度推广在 MyBatis 中,缓存分为 一级缓存 和 二级缓存。它们的作用是减少数据库查询次数,提高性能。然而,在某些情况下,缓存会失效或被清空。 一、一级缓存(sqlSession 级别缓存) 1. 一级缓存的基本特性 一级缓存…

在 MyBatis 中,缓存分为 一级缓存二级缓存。它们的作用是减少数据库查询次数,提高性能。然而,在某些情况下,缓存会失效或被清空。

一、一级缓存(sqlSession 级别缓存)

1. 一级缓存的基本特性
  • 一级缓存默认开启,作用范围是 SqlSession 的生命周期。
  • 在同一个 SqlSession 内,如果两次查询条件完全相同且没有发生更新操作,则第二次查询会直接从缓存中获取结果。
2. 一级缓存失效情形

以下情况会导致一级缓存失效:

  1. SqlSession 关闭或提交事务后

    • 当 SqlSession 被关闭或提交事务时,一级缓存会被清空。
    • 示例:
    sqlSession.commit(); // 提交事务后,一级缓存失效
    sqlSession.close();   // 关闭 SqlSession 后,一级缓存失效
  2. 执行了增删改操作

    • 如果在同一个 SqlSession 中执行了 insertupdate 或 delete 操作,MyBatis 会清空一级缓存。
    • 原因:这些操作可能会影响表中的数据,导致缓存中的数据与数据库不一致。
  3. 手动调用 clearCache() 方法

    • 开发者可以手动调用 sqlSession.clearCache() 来清空当前 SqlSession 的一级缓存。
  4. 查询条件不同

    • 如果两次查询的条件不同(即使只差一个参数),MyBatis 不会使用缓存。
  5. 查询间隔过长

    • 如果两次查询之间的时间间隔超过了 MyBatis 的缓存刷新时间(默认无限制),缓存可能会失效。

二、二级缓存(Mapper 级别缓存)

1. 二级缓存的基本特性
  • 二级缓存的作用范围是整个 Mapper 文件(即命名空间 namespace),多个 SqlSession 可以共享同一个二级缓存。
  • 默认情况下,二级缓存需要手动配置才能启用。
2. 配置二级缓存
<!-- 在 Mapper 文件中启用二级缓存 -->
<cache />
3. 二级缓存失效情形

以下情况会导致二级缓存失效:

  1. 未启用二级缓存

    • 如果未在 Mapper 文件中配置 <cache> 标签,或者未在全局配置文件中启用二级缓存(settings.cacheEnabled=true),则不会使用二级缓存。
  2. Mapper 方法未设置 useCache=true

    • 默认情况下,查询方法会使用二级缓存。如果将 useCache 设置为 false,则该方法不会使用二级缓存。
    • 示例:
    <select id="findUserById" resultType="User" useCache="false">SELECT * FROM users WHERE id = #{id}
    </select>
  3. Mapper 方法设置了 flushCache=true

    • 如果查询方法设置了 flushCache=true,则每次执行该方法时都会清空二级缓存。
    • 示例:
    <select id="findUserById" resultType="User" flushCache="true">SELECT * FROM users WHERE id = #{id}
    </select>
  4. 执行了增删改操作

    • 如果在同一个 Mapper 中执行了 insertupdate 或 delete 操作,默认会清空该 Mapper 的二级缓存。
    • 示例:
    <update id="updateUser">UPDATE users SET name = #{name} WHERE id = #{id}
    </update>
  5. 手动调用 clearCache() 方法

    • 可以通过 sqlSession.clearCache() 清空当前 SqlSession 的一级缓存和二级缓存。
  6. 缓存策略冲突

    • 如果多个 Mapper 文件共享同一个二级缓存,但它们的缓存策略(如 LRU、FIFO 等)不一致,可能导致缓存失效。
  7. 缓存超时

    • 如果设置了缓存的过期时间(通过 <cache> 标签的 eviction 属性),当缓存数据超过设定时间后会被清除。
    • 示例:
    <cache eviction="LRU" flushInterval="60000" /> <!-- 缓存每 60 秒刷新一次 -->
  8. 跨命名空间访问

    • 如果两个不同的 Mapper 文件共享同一个二级缓存,但在其中一个 Mapper 中发生了增删改操作,另一个 Mapper 的缓存也会被清空。
  9. 自定义缓存实现问题

    • 如果实现了自定义缓存(通过 <cache-ref> 或自定义 Cache 接口),但逻辑有问题,可能导致缓存失效。

三、总结

缓存类型失效情形
一级缓存

1. SqlSession 关闭或提交事务

2. 执行增删改操作

3. 手动调用 clearCache()

4. 查询条件不同

5. 查询间隔过长

二级缓存

1. 未启用二级缓存

2. useCache=false

3. flushCache=true

4. 执行增删改操作

5. 手动调用 clearCache()

6. 缓存策略冲突

7. 缓存超时

8. 跨命名空间访问

9. 自定义缓存实现问题

了解这些缓存失效的情形有助于更好地控制缓存行为,避免因缓存不一致导致的数据错误。

http://www.dtcms.com/wzjs/569977.html

相关文章:

  • 龙华企业网站建设公司设计在线好看
  • 广州科 外贸网站建设网站建设收费标准咨询
  • 工作中最常用的45个excel技巧大全2018年企业网站优化如何做
  • 网站建设包括哪些方面wordpress上传到哪个文件夹
  • 网站建设行业数据网站原型设计
  • 推广 高端网站建设郑州建设厅网站
  • 学习做网站只学过c广西住房城乡建设部官网
  • 乐都网站建设哪家好wordpress 仅显示标题
  • 捡个校花做老婆是哪个网站的wordpress的主题安装在什么目录
  • 中山cms建站郑州网站推广平台
  • 网站开发笔记本丰台广州网站建设
  • 怎么自己建立公司网站wordpress百度提交插件
  • 旅游网站设计与分析网站数据库维护都是做什么
  • 网站大全网站免费昆明网站排名优化报价
  • 一站式快速网站排名多少钱百度推广的定义
  • 湖南张家界建设局网站网站开发实现本地注册登录
  • 网站开发的软件介绍手机网站菜单代码
  • h5 建站网站 移动端他达拉非的副作用和危害
  • 网站开发费怎么做会计分录wordpress 外贸站
  • 备案期间需要关闭网站网站播放器源码
  • 廊坊网站制作费用网站放到国外空间
  • 自己能够做投票网站吗十大电商平台有哪些
  • 诚聘高新网站开发工程师wordpress tinction
  • 池州网站建设开发阿里云个人域名备案流程
  • 如何黑掉jsp做的网站南京seo圈子
  • 企查查企业信息查询网站上海网站开发的公司
  • 服饰网站模板网络系统建设方案
  • 网站帮助中心设计个人开公司需要多少注册资金
  • 网站类别划分wordpress安装数据库
  • 瓯海网站建设友情链接推广平台