【面试篇--框架】mybatis缓存概念

一、一级缓存

        基于perpetualCache的hashmap本地缓存,其存储作用域为session,当session flush 或close 之后,该session 中所有cache就将清空,默认打开一级缓存

        

二、二级缓存

        二级缓存与一级缓存其机制相同,默认也是perpetualCache的hashmap缓存,不用在于其作用域为mapper(namespace),并且可自定义存储源,如Ecache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现serializable序列化接口(可用来保存对象的状态),可在他的映射文件中配置<cache/>

备注:对于缓存数据更新机制,当某一个作用域(一级缓存session/二级缓存namespaces)的进行了C/U/D操作后,默认该作用域下所有的select 中缓存都将被clear

三、spring当中为什么mybatis的一级缓存会失效的原因

        1.spring的SqlSessionTemplate继承了sqlsession接口,而且在方法中加多了一层代理,只要开启事务则可以重新开启mybatis一级缓存

        参考:你凭什么说Spring会导致MyBatis的一级缓存失效! - 腾讯云开发者社区-腾讯云

四、mybatis的二级缓存存在什么问题?怎么避免?

        1. 只能在【只有单表操作】的表上使用缓存
        不只是要保证这个表在整个系统中只有单表操作,而且和该表有关的全部操作必须全部在一个namespace下。
        2. 在可以保证查询远远大于insert,update,delete操作的情况下使用缓存
        这一点不需要多说,所有人都应该清楚。记住,这一点需要保证在1的前提下才可以!

        参考:mybatis二级缓存不推荐使用_攻城狮Luke(刘健彬)的博客-CSDN博客

详情参考:图解 | 聊聊 MyBatis 缓存 - 掘金

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值