美文网首页
Mybatis缓存机制:一级缓存与二级缓存

Mybatis缓存机制:一级缓存与二级缓存

作者: 小院看客 | 来源:发表于2020-03-17 23:28 被阅读0次

    MyBatis的缓存分为一级缓存(本地缓存)和二级缓存

    1、一级缓存

    MyBatis的一级缓存是默认会开启的并且不能控制,存在于SqlSession的生命周期中。在同一个SqlSession中查询时,MyBatis会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个Map对象中,在执行同样的查询操作时会从缓存中拿数据。若执行了DML操作(insert、update、delete),则会清空缓存中的数据。

    2、二级缓存

    二级缓存是需要配置开启的。不同于一级缓存只存在与SqlSession的生命周期,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。二级缓存是多个SqlSession共享的,其作用域是mapper的同一个namespace。

    2.1、配置二级缓存

    在mybatis-config.xml中添加如下代码

    <settings>

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

    </settings>

    2.2、Mapper中的配置

    在Mapper.xml文件中增加<cache/>可开启使用二级缓存

    默认的二级缓存会有如下效果:

    1)映射语句文件中的所有的查询语句会被缓存

    2)映射语句文件中的insert、update、delete语句操作会刷新缓存

    3)缓存会使用LRU(Least Recently Used 最近最少使用)的算法来回收

    4)缓存会存储集合或者对象的1024个引用

    5)缓存会被视为read/write的,意味着对象检索不是共享的,可以安全的被调用者修改,而不干扰其他调用者或者线程所做的前在修改。

    2.3、cache元素属性

    <cache eviction ="FIFO" <!--回收策略-->

                flushInterval = "60000"<!--刷新间隔,单位毫秒,可以设置任意整数,默认不设置-->

                size=  128 <!--引用数目,默认值是1024-->

                readOnly= "true"/><!--属性可被设置为true/false,默认是false-->

    2.4、Mapper接口中的配置

    使用注解方式,添加@CacheNamespace

    如:

    @CacheNamespace

    publicinsterface RoleMapper{

    }

    相关文章

      网友评论

          本文标题:Mybatis缓存机制:一级缓存与二级缓存

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