zoukankan      html  css  js  c++  java
  • MyBatis缓存

    一:简介

     1.1、概念

      数据的临时存放空间

     1.2、主要特点

      1.数据会被临时存在内存中

      2.可以将查询结果临时存放在缓存中

      3.第二次开始数据获取,从缓存中获取

      4.服务器内部缓存,每次获取数据不需要通过网络传输

     1.3、优点

      1.提高查询效率

      2.降低数据库访问压力(DB硬件、DB连接数资源)


    二、一级缓存

     2.1、概念

      SqlSsession级别的缓存

     2.2、特点

      1.SqlSsession自带一块独立的空间

      2.SqlSsession查询数据,会默认放入缓存中

      3.第二次查询,SqlSsession会直接从缓存中拿数据,不会发送sql语句

      4.生命周期为一个事务过程,如果SqlSsession.commit()被调用,一级缓存将会被清空


     三、二级缓存

     3.1、概念

      1.全局缓存

      2.SqlSessionFactory级别缓存

      3.可以共享多个SqlSession

     3.2、特点

      1.第一次查询会从DB中获得数据,并通过网络传输给java

      2.将第一次查询结果,放入全局缓存(二级缓存)

      3.从第二次查询开始,每次都是从全局缓存中获取数据(tomcat的jvm的内存中获取,避免通过网络传输)

     3.3、使用步骤

      1.被缓存的的数据对象类型要可序列化

    public class xxx implements Serializable{};

      2.需要在使用二级缓存的sql的mapper中添加

     <cache> </cache>  
    表示当前mapper文件中所有select标签,查询结果都会放入缓存中

     3.4、工作机制

      1.每次查询先从缓存中获得数据,如果获得,直接返回数据,不会发送sql

      2.如果缓存中没有获得,那么就会发送sql,从数据库获得数据

     3.5、其他特点

      1.开启二级缓存的mapper文件中的所有select标签都会默认使用缓存。(先从缓存中获取,能获取就返回,不能获取就从DB获取,并存入缓存)

      2.mapper文件中的DML标签insert update delete 会默认清空缓存,发生在事务提交之后。(保持缓存中数据的一致性)

      3.session.commit(); 只有提交了事务才能将查询结果二级缓存中。(清空一级缓存)

     3.6、二级缓存原理:

      1.二级缓存划分规则:是以mapper文件中的namespace进行划分的,并且一个缓存空间对应一个namespace

      2.源码实现:

        本质上是一个HashMap

        key:"namespaceid+执行sql语句+实际传入的参数"

        value:查询结果的返回值

     3.7、缓存应用原则:

      该数据的查询次数远远多于修改次数

  • 相关阅读:
    第三次上机
    第5次作业
    第二次上机练习
    第三次作业
    第一次作业
    第一次作业
    第二次上机练习
    第二次作业
    第一次作业
    第四周作业
  • 原文地址:https://www.cnblogs.com/lhl0131/p/13503197.html
Copyright © 2011-2022 走看看