zoukankan      html  css  js  c++  java
  • Mybatis 二级缓存的使用

    Mybatis二级缓存

    • 简介:二级缓存是namesace级别的,多个SqlSession去操作同个namespace下的Mapper的sql语句,多个SqlSession可以共用二级缓存,如果两个mapper的namespace相同,(既使是两个mapper,那么这两个mapper中执行sql查询的数据也将存在相同的二级缓存区域中,但是最后是每个Mapper单独的命名空间)
    • 基于PerpetualCache的HashMap本地缓存,可自定义存储源,如Ehcacche/Redis等
    • 默认没有开启二级缓存
    • 操作流程:第一次调用某个namespacce下的SQL去查询信息,查询到的信息会存放该mapper对应的二级缓存区域。第二次调用同个namespace下的mapper映射文件中,相同的sql去查询信息,会去对应的二级缓存内取结果

    失效策略

      执行同个namespace下的mapper映射文件中增删改sql,并执行了commit操作,会清空该二级缓存

    注意:实现二级缓存的时候,Mybatis建议返回的POJO是可序列化的,也就是建议实现Serializable接口

    缓存淘汰策略:会使用默认的LRU算法来收回(最近最少使用的)

    开启缓存

    如何开启某个二级缓存mapper.xml里面配置

        <!--开启Mapper的namespace下的二级缓存-->
        <!--
            eviction:代表的是缓存回收策略,常见下面两种
            1)、LRU,最近最少使用的,移除最长时间不用的对象
            2)、FIFO,先进先出,按对象进入缓存的顺序来移除他们
            flushInterval:刷新间隔时间,单位为毫秒,这里配置的是10秒,如果不配置他,当SQL被执行的时候才会去刷新缓存
            size:引入数目,代表缓存最多可以存储多少个对象,设置过大会导致内存溢出
            readOnly:只读,缓存数据只能读取不能修改,默认值为false
        -->
        <cache eviction="LRU" flushInterval="100000" readOnly="true" size="1024"></cache>

    全局配置

        <!--全局配置-->
        <settings>
            <!--这个配置使全局的映射器(二级缓存)启用或禁用缓存,全局总开关,这里关闭,mapper中开启了也没用-->
            <setting name="cacheEnabled" value="true"/>
        </settings>

    一级缓存和二级缓存使用顺序

    优先查询二级缓存==》查询一级缓存==》数据库

    控制某个方法不走二级缓存

    在标签中添加 useCache="false"

        <select id="queryUserOrder" resultMap="UserOrderResultMap" useCache="false">
        select
            u.id,
            u.name,
            u.pwd,
            u.phone,
            u.head_img,
            v.id idv,
            v.out_trade_no,
            v.create_time,
            v.state,
            v.total_fee,
            v.video_id,
            v.video_title,
            v.video_img
        from user u left join video_order v on u.id = v.user_id
        </select>
  • 相关阅读:
    8.5 day8
    8.1 day6
    课后作业 day29
    博客整理day29
    博客整理day28
    博客整理day27
    博客整理day26
    课后作业 day26
    Python 学习day22
    课后作业 day21
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13296267.html
Copyright © 2011-2022 走看看