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>
  • 相关阅读:
    [DB] 数据库的连接
    JS leetcode 翻转字符串里的单词 题解分析
    JS leetcode 拥有最多糖果的孩子 题解分析,六一快乐。
    JS leetcode 搜索插入位置 题解分析
    JS leetcode 杨辉三角Ⅱ 题解分析
    JS leetcode 寻找数组的中心索引 题解分析
    JS leetcode 移除元素 题解分析
    JS leetcode 最大连续1的个数 题解分析
    JS leetcode 两数之和 II
    JS leetcode 反转字符串 题解分析
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13296267.html
Copyright © 2011-2022 走看看