面试鸭返利网

mybatis二级缓存的配置

MyBatis二级缓存配置是提升应用性能的关键技术,通过跨SqlSession共享数据减少数据库访问。配置时需在mybatis-config.xml开启cacheEnabled,Mapper文件添加<cache>标签并设置淘汰策略、刷新间隔等参数,实体类必须实现Serializable接口。面试常考二级缓存的脏读处理、分布式环境适配及缓存更新机制,合理配置能显著提升系统响应速度。注意避免大对象内存溢出,生产环境建议监控缓存命中率。掌握MyBatis二级缓存配置是Java开发者优化数据库访问的必备技能,对构建高性能应用至关重要。

mybatis二级缓存的配置

顺带分享个福利:2025年Java面试宝典网盘链接 ,提取码: 9b3g,建议提前保存!

作为面试常客,mybatis二级缓存几乎是必考题。今天咱们就掰开揉碎聊聊它的配置逻辑,完全从面试实战角度出发,让你面对考官能对答如流。

mybatis二级缓存到底是个啥?

简单说,mybatis二级缓存是跨SqlSession的缓存机制。一级缓存作用域仅限单个SqlSession,而mybatis二级缓存的生命周期与整个SqlSessionFactory绑定。这意味着,不同用户、不同请求只要命中相同SQL,就能直接从mybatis二级缓存中取数据,极大减少数据库压力。

面试鸭返利网

为什么面试官总问mybatis二级缓存配置?

  1. 性能优化体现:合理配置mybatis二级缓存直接反映你对系统性能优化的理解深度
  2. 坑点识别能力:误用mybatis二级缓存会导致脏读、内存溢出,面试官要看你是否踩过坑
  3. 框架原理掌握:涉及Executor、Cache接口设计,能看出MyBatis底层认知

手把手配置mybatis二级缓存(核心四步)

mybatis二级缓存开启第一步:全局开关

mybatis-config.xml中必须显式开启:

<settings>
    <!-- 关键!启用二级缓存总开关 -->
    <setting name="cacheEnabled" value="true"/>
</settings>

mybatis二级缓存开启第二步:Mapper层声明

在需要缓存的Mapper.xml增加<cache/>标签:

<mapper namespace="com.example.UserMapper">
    <!-- 核心配置!声明启用该命名空间的二级缓存 -->
    <cache 
        eviction="LRU"  
        flushInterval="60000"
        size="1024" 
        readOnly="true"/>
</mapper>

参数释义:

  • eviction:淘汰策略(LRU/FIFO/SOFT/WEAK)
  • flushInterval:自动刷新时间(毫秒)
  • size:缓存对象最大数量
  • readOnly:是否只读(性能关键选项)

mybatis二级缓存开启第三步:实体类序列化

必须! 缓存对象需实现Serializable接口:

public class User implements Serializable {
    // ... 字段和getter/setter
}

mybatis二级缓存开启第四步:语句级控制

针对特定SQL微调缓存行为:

<select id="selectById" resultType="User" useCache="true">
    SELECT * FROM user WHERE id = #{id}
</select>

<insert id="insertUser" flushCache="true">
    INSERT INTO user(...) VALUES (...)
</insert>

配置mybatis二级缓存必须绕开的深坑

  1. 分布式环境失效:单机缓存无法跨节点共享,此时需集成Redis等中央缓存(常考分布式解决方案)
  2. 关联查询更新陷阱:修改A表数据不会自动清除B表关联缓存,需手动配置<cache-ref/>或写拦截器
  3. 事务提交才生效:未提交事务的修改不会刷新缓存(考官爱问缓存更新时机)
  4. 大对象内存溢出:缓存大量数据务必设置合理的sizeeviction策略

面试鸭返利网

高频面试题拆招

Q:二级缓存导致脏读怎么破?
A:优先考虑readOnly=true避免修改缓存对象;或使用BlockingCache加锁保证线程安全。

Q:如何强制清空某个二级缓存?
A:获取SqlSession后调用clearCache(),但实际更常用Cache接口的clear()方法。

Q:一级缓存和二级缓存并存时优先级?
A:查询顺序:二级缓存 → 一级缓存 → 数据库。执行更新操作时,同一事务内先清一级缓存,事务提交后再清二级缓存。

顺手分享个福利 👉 如果需要买面试鸭会员,通过 面试鸭返利网 找我下单,能返25元!省杯奶茶钱不香嘛~

最后叮嘱

搞懂mybatis二级缓存配置的关键在于理解其作用域与生命周期。生产环境务必结合监控评估缓存命中率,避免“为了缓存而缓存”。面试时被问到配置,重点说清楚序列化要求、参数调优和典型避坑方案,这三点答到位绝对加分!

面试鸭返利网

如果你想获取更多关于面试鸭的优惠信息,可以访问面试鸭返利网面试鸭优惠网,了解最新的优惠活动和返利政策。

立即加入面试鸭会员 →