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>
复制代码

 

posted @   陈彦斌  阅读(374)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2019-07-13 .Net高级编程-自定义错误页 web.config中<customErrors>节点配置
2019-07-13 .Net网站防盗链
2019-07-13 .Net捕获网站异常信息记录操作日志
点击右上角即可分享
微信分享提示
主题色彩