zoukankan      html  css  js  c++  java
  • mybatis由浅入深day02_7查询缓存_7.2一级缓存_一级缓存应用

    查询缓存

      7.1 什么是查询缓存

    mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。

    mybaits提供一级缓存,和二级缓存。

     

    一级缓存是SqlSession级别的缓存。在操作数据库时需要构造 sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

    Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。当一个sqlSession结束后该sqlSession中的一级缓存也就不存在了。Mybatis默认开启一级缓存。

    二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

    Mybatis二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace,不同的sqlSession两次执行相同namespace下的sql语句且向sql中传递参数也相同即最终执行相同的sql语句,第一次执行完毕会将数据库中查询的数据写到缓存(内存),第二次会从缓存中获取数据将不再从数据库查询,从而提高查询效率。Mybatis默认没有开启二级缓存需要在setting全局参数中配置开启二级缓存。

      

    为什么要用缓存?

    如果缓存中有数据就不用从数据库中获取,大大提高系统性能。

      

      7.2 一级缓存

        7.2.1 一级缓存工作原理

    下图是根据id查询用户的一级缓存图解:

      

    第一次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,如果没有,从数据库查询用户信息。

    得到用户信息,将用户信息存储到一级缓存中。

    如果sqlSession去执行commit操作(执行插入、更新、删除),清空SqlSession中的一级缓存,这样做的目的为了让缓存中存储的是最新的信息,避免脏读。

    第二次发起查询用户id为1的用户信息,先去找缓存中是否有id为1的用户信息,缓存中有,直接从缓存中获取用户信息。

    一级缓存区域是根据SqlSession为单位划分的。

    每次查询会先从缓存区域找,如果找不到从数据库查询,查询到数据将数据写入缓存。

    Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象

    sqlSession执行insert、update、delete等操作commit提交后会清空缓存区域。

        7.2.2 一级缓存测试

    mybatis默认支持一级缓存,不需要在配置文件去配置。

    按照上边一级缓存原理步骤去测试。

      

      

    打断点测试跟踪一级缓存的实现原理

        7.2.3 一级缓存应用

    正式开发,是将mybatis和spring进行整合开发,事务控制在service中。

    一个service方法中包括 很多mapper方法调用。

    service{

      //开始执行时,开启事务,创建SqlSession对象

      //第一次调用mapper的方法findUserById(1)

      //第二次调用mapper的方法findUserById(1),从一级缓存中取数据

      //方法结束,sqlSession关闭

    }

    如果是执行两次service调用查询相同的用户信息,不走一级缓存,因为service方法结束,sqlSession就关闭,一级缓存就清空。

  • 相关阅读:
    linux ss 命令
    linux netstat 命令
    linux firewalld 命令
    linux sshd 服务
    linux rysnc 命令(远程复制)
    linux scp 命令
    linux ifconfig
    linux /var/log 日志文件
    linux systemctrl 命令
    linux 创建新用户并设置管理员权限
  • 原文地址:https://www.cnblogs.com/justdoitba/p/8051700.html
Copyright © 2011-2022 走看看