美文网首页
mybatis缓存机制

mybatis缓存机制

作者: 李中凯_f395 | 来源:发表于2019-03-16 16:00 被阅读0次

    一级缓存

    SqlSession级别缓存,作用域在一次会话之间有效,默认开启

    运行原理:

    1. 第一次执行select操作完毕后,会将查询到的结果缓存到map中。
    2. 第二次执行select操作时,如果传入的参数一样,就不去查询数据库而是直接返回,这样提高了效率。

    注意:

    1. 在会话结束时会自动清除缓存。
    2. 如果执行了DML操作,并且commit了,会将缓存清除,避免脏读

    二级缓存

    SqlSessionFactory级别缓存,作用域在同一个namespace有效,默认关闭

    如何配置

    1. 在mybatis配置文件中加入
    <settings>
      <setting name="cacheEnabled" value="true"/>
    </settings>
    
    1. 在mapper文件中配置
     <catche eviction="LRU" flushInterval="6000" size="512" readOnly="true"/>
    

    这里配置了一个LRU缓存,并每隔60秒刷新,最大存储512个对象,而却返回的对象是只读的

    若想禁用当前select语句的二级缓存,添加useCache="false"修改如下:

    <select id="getCountByName" parameterType="java.util.Map" resultType="INTEGER" statementType="CALLABLE" useCache="false">
    

    运行原理

    1. 当一个sqlsession进行select操作完毕时,将查询到的结果缓存到map中
    2. 当另一个sqlsession进行select操作时,先查询是否有一级缓存,如果没有再去查找二级缓存,找到了就换回,这样减少了服务器压力,提高性能。

    注意:

    当执行了DML操作,就会清除缓存,避免脏读。

    了解:

    mybatis二级缓存使用的是JVM的oscatch缓存,hibernate二级缓存使用>的是JVM的ehcatch缓存。
    oscatch:主要针对数据库访问层
    ehcatch:主要针对jsp页面缓存

    相关文章

      网友评论

          本文标题:mybatis缓存机制

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