Mybatis一级缓存与二级缓存

一、简介

        数据库接收到sql语句后,需要词法/语法解析,优化sql语句,制定执行计划。多数情况下,相同的sql语句可能只是传入参数不同(如where条件后的值不同...)。

        如果每次都需要经过上面的 词法/语法解析、语句优化、制定执行计划 等,则效率就明显不行了。所以预编译的优势就体现出来了。预编译语句在被MySQL编译器编译后,执行代码会被缓存下来。那么下次调用时,只要是相同的预编译语句就再不需要编译,只要将参数直接传入编译过的语句执行代码中即可。

        其中我们使用mybatis时,使用#{}注入参数时,mybatis使用的是预编译能够防止sql注入。

一级缓存

一般来说一个请求中的增删改查是同一个sqlSession,每个请求有自己的一级缓存,同一个sqlSession两个查询之间有一个insert、update或delete,会使查询的缓存清空

二级缓存

二级缓存是全局的,多个请求可以公用一个缓存、需要手动开启

  • 缓存会先放到一级缓存中、当sqlSession会话提交或者关闭时才会将一级缓存刷新到二级缓存中;
  • 开启二级缓存后,用户查询时,会先去二级缓存中找,找不到在去一级缓存中找;
  • 另外,缓存还有以下几种情况需要注意
  • 映射语句文件中的所有 select 语句的结果将会被缓存。
  • 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。
  • 缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存。
  • 缓存不会定时进行刷新(也就是说,没有刷新间隔)。
  • 缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用。
  • 缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

相关推荐

  1. MyBatis一级二级缓存介绍

    2023-12-08 07:46:06       7 阅读
  2. MyBatis 延迟加载,一级缓存二级缓存设置

    2023-12-08 07:46:06       12 阅读
  3. springboot开启mybatis二级缓存

    2023-12-08 07:46:06       32 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-08 07:46:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-08 07:46:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-08 07:46:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-08 07:46:06       20 阅读

热门阅读

  1. # 如何在Nginx中配置服务器负载均衡(SLB)

    2023-12-08 07:46:06       36 阅读
  2. 【.NET Core】Linq查询运算符(二)

    2023-12-08 07:46:06       32 阅读
  3. 设置Ubuntu或树莓派系统,允许root用户ssh方式连接

    2023-12-08 07:46:06       38 阅读
  4. Ubuntu 20.04 安装Orthanc

    2023-12-08 07:46:06       40 阅读
  5. extern”C”的作用及注意事项

    2023-12-08 07:46:06       42 阅读
  6. 微信小程序uni-app:常用Form表单组件使用示例

    2023-12-08 07:46:06       46 阅读
  7. Boost:asio多io_service,多线程run

    2023-12-08 07:46:06       31 阅读
  8. 使用单例模式+观察者模式实现参数配置实时更新

    2023-12-08 07:46:06       30 阅读
  9. 芯知识 | 什么是单片机语音芯片?

    2023-12-08 07:46:06       52 阅读
  10. GO设计模式——11、装饰器模式(结构型)

    2023-12-08 07:46:06       35 阅读
  11. TrustZone概述

    2023-12-08 07:46:06       39 阅读