zoukankan      html  css  js  c++  java
  • 170214、mybatis一级和二级缓存

    mybatis一级缓存是指在内存中开辟一块区域,用来保存用户对数据库的操作信息(sql)和数据库返回的数据,如果下一次用户再执行相同的请求,

    那么直接从内存中读数数据而不是从数据库读取。 

    其中数据的生命周期有两个影响因素。

    对sqlsession执行commit操作时

    对sqlsession执行commit操作,也就意味着用户执行了update、delete等操作,那么数据库中的数据势必会发生变化,

    如果用户请求数据仍然使用之前内存中的数据,那么将读到脏数据。

    所以在执行sqlsession操作后,会清除保存数据的HashMap,用户在发起查询请求时就会重新读取数据并放入一级缓存中了。

    关闭sqlsession

    一般在mybatis集成spring时,会把SqlSessionFactory设置为单例注入到IOC容器中,不把sqlsession也设置为单例的原因是sqlsession是线程不安全的,

    所以不能为单例。那也就意味着其实是有关闭sqlsession的过程的。其实,对于每一个service中的sqlsession是不同的,

    这是通过mybatis-spring中的org.mybatis.spring.mapper.MapperScannerConfigurer创建sqlsession自动注入到service中的。 

    而一级缓存的设计是每个sqlsession单独使用一个缓存空间,不同的sqlsession是不能互相访问数据的。当然,在sqlsession关闭后,其中数据自然被清空。

    二级缓存

    一级缓存的作用域仅限于一个sqlsession,但是二级缓存的作用域是一个namespace。但并不是意味着同一个namespace创建的mapper可以互相读取缓存内容,

    这里的原则是,如果开启了二级缓存,那么在关闭sqlsession后,

    会把该sqlsession一级缓存中的数据添加到namespace的二级缓存中。

    1,打开二级缓存总开关 

    打开总开关,只需要在mybatis总配置文件中加入一行设置

    <settings>

       <!--开启二级缓存-->

        <setting name="cacheEnabled" value="true"/>

    </settings>

    2.打开需要使用二级缓存的mapper的开关

    在需要开启二级缓存的mapper.xml中加入caceh标签

    <cache/>

    3.POJO序列化

    让需要使用二级缓存的POJO类实现Serializable接口,如

    public class User implements Serializable {

    }

    通过之前三步操作就可以使用二级缓存了

    缓存配置

    关闭刷新

    在默认情况下,当sqlsession执行commit后会刷新缓存,但是也可以强制设置为不刷新,在不需要刷新的标签中加入

    flushCache="false"

    <select id="findUsers" resultType="cn.elinzhou.mybatisTest.pojo.User" flushCache="false">

    那么,无论是否执行commit,缓存都不会刷新了。但是这样会造成脏读,只有在特殊情况下才使用

    自动刷新

    有些情况下,需要设置自动刷新缓存,那么需要配置对应mapper中的cache标签。

    flushInterval="10000"

    该属性表示每隔10秒钟自动刷新一遍缓存

  • 相关阅读:
    vue强制更新$forceUpdate()
    js数组拼接成字符串,去除最后一个逗号
    JavaScript数组遍历:for、foreach、for in、for of、、().each的区别
    json.stringify()的妙用,json.stringify()与json.parse()的区别
    第四次博客作业-结对项目
    于达——第九次作业
    于达——第八次作业
    软件工程第三次作业——关于软件质量保障初探
    于达——第七次作业
    于达——第六次作业
  • 原文地址:https://www.cnblogs.com/zrbfree/p/6405330.html
Copyright © 2011-2022 走看看