美文网首页
查询缓存(第一讲)

查询缓存(第一讲)

作者: 辽A丶孙悟空 | 来源:发表于2020-07-28 13:54 被阅读0次

查询缓存的使用,主要是为了提高查询访问速度。将用户对同一数据的重复查询过程简化,不再每次均从数据库查询获取结果数据,从而提高访问速度。
MyBatis 的查询缓存机制,根据缓存区的作用域(生命周期)可划分为两种:一级查询
缓存与二级查询缓存。

一级查询缓存

MyBatis 一级查询缓存是基于 org.apache.ibatis.cache.impl.PerpetualCache 类的 HashMap 本地缓存,其作用域是 SqlSession。在同一个 SqISession 中两次执行相同的 sql 查询语句,第一次执行完毕后,会将查询结果写入到缓存中,第二次会从缓存中直接获取数据,而不再到数据库中进行查询,从而提高查询效率。
当一个 Sq|Session 结束后,该 SqlSession 中的一级查询缓存也就不存在了。myBatis 默认一级查询缓存是开启状态,且不能关闭。


执行原理示意图
执行流程图

项目:MyBatis_Cache_SqlSession。在以前动态 SQL 项目的基础上修改即可。

  • 一级查询缓存的存在性证明
    (1)修改测试类



    (2)查看控制台
    执行完后,发现只执行了一次从 DB 中的查询,第二次的查询结果是直接输出的。说明,第二次是从 SqlSession 缓存中读取的。


  • 从缓存读取数据的依据是 Sql 的 id
    一级缓存缓 存的是相同 Sql 映射 id 的查询结果,而非相同 Sql 语句的查询结果。因为 myBatis 内部对于查询缓存,无论是一级查询缓存还是二级查询缓存,其底层均使用一个 HashMap 实现:key 为 Sql 的 id 相关内容,value 为从数据库中查询出的结果。
    (1)修改映射文件
    在映射文件中对某一个<select/>标签进行完全复制,然后修改一下这个 SQL 映射的 id。也就是说,这两个 SQL 映射除了 id 不同,其他均是相同的,即查询结果肯定是相同的。



    (2)修改 Dao 接口



    (3)修改测试类

    (4)查看控制台
    查看控制台,发现第二次查询结果与第一次的完全相同,但第二次查询并没有从缓存中读取数据,而是直接从 DB 中进行的查询。这是因为从缓存读取数据的依据是查询 SQL 的映射 id,而非查询结果。
  • 增删改对一级查询缓存的影响
    增、删、改操作,无论是否进行提交 sqlSession.commit(),均会清空一级查询缓存,使查询再次从 DB 中 select。
    (1)修改测试类



    (2)查看控制台


相关文章

  • Hibernate @Cache 注解

    本文主要摘自Hibernate缓存,整理些要点出来 Hibernate查询缓存依赖于二级缓存。当启用查询缓存后,第...

  • 查询缓存(第一讲)

    查询缓存的使用,主要是为了提高查询访问速度。将用户对同一数据的重复查询过程简化,不再每次均从数据库查询获取结果数据...

  • MySQL学习——查询缓存

    MySQL查询缓存简介 MySQL查询缓存是MySQL将查询返回的完整结果保存在缓存中。当查询命中该缓存,MySQ...

  • Mysql - 一条sql语句是如何执行的

    1. 连接器 长连接保持通信 2. 查询缓存 每次查询都会缓存查询结果,相同语句再次查询时直接返回缓存结果,缓存结...

  • Yii2缓存组件之数据库查询缓存

    查询缓存 查询缓存是一个建立在数据缓存之上的特殊缓存特性。它用于缓存数据库查询的结果。(PS需配置好缓存配置) 查...

  • 查询缓存

    查询缓存原理 mysql查询缓存保存完整的查询结果,当查询命中缓存时,立刻返回结果,跳过了解析,优化和执行阶段。 ...

  • MySQL数据库性能优化

    MySQL架构 查询缓存 查询缓存(Query Cache)原理: 缓存SELECT操作或预处理查询的结果集和SQ...

  • 5. 查询缓存和索引

    1. 查询缓存 查询缓存( Query Cache )原理缓存SELECT操作或预处理查询的结果集和SQL语句,...

  • Mysql 查询优化

    如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。缓存在第一次查询后,MySQL便将查询语句以及...

  • (8)MySQL性能优化的最佳21条经验(未完待续)

    1.为查询缓存优化你的查询 某些查询语句会让MySQL不使用缓存。 MySQL的查询缓存对这个函数不起作用。像...

网友评论

      本文标题:查询缓存(第一讲)

      本文链接:https://www.haomeiwen.com/subject/uhrtrktx.html