Why?Mybatis的一级和二级缓存都不建议使用?

本文详细介绍了Mybatis的一级和二级缓存工作原理。一级缓存生命周期与SqlSession相同,由于更新操作会导致其失效,实际使用中一级缓存效果有限。二级缓存虽为应用级别,但由于事务处理可能导致脏数据问题。因此,不建议在生产环境中直接使用Mybatis的一级和二级缓存,推荐调整为Statement级别或结合其他缓存策略。
摘要由CSDN通过智能技术生成

Why?Mybatis的一级和二级缓存都不建议使用?

// BaseExecutor

protected PerpetualCache localCache;

一级缓存是BaseExecutor中的一个成员变量localCache(对HashMap的一个简单封装),因此一级缓存的生命周期与SqlSession相同,如果你对SqlSession不熟悉,你可以把它类比为JDBC编程中的Connection,即数据库的一次会话。

「一级缓存和二级缓存key的构建规则是一致的,都是一个CacheKey对象,因为Mybatis中涉及动态SQL等多方面的因素,缓存的key不能仅仅通过String来表示」

当执行sql的如下4个条件都相等时,CacheKey才会相等

  1. mappedStatment的id

  2. 指定查询结构集的范围

  3. 查询所使用SQL语句

  4. 用户传递给SQL语句的实际参数值

「当查询的时候先从缓存中查询,如果查询不到的话再从数据库中查询」

org.apache.ibatis.executor.BaseExecutor#query

Why?Mybatis的一级和二级缓存都不建议使用?

Why?Mybatis的一级和二级缓存都不建议使用?

当使用同一个SqlSession执行更新操作时,会先清空一级缓存。因此一级缓存中内容被使用的概率也很低

Why?Mybatis的一级和二级缓存都不建议使用?

一级缓存测试

======

「看到美团技术团队上关于一级缓存和二级缓存的一些测试写的挺不错的,就直接引用过来了」

原文地址:https://tech.meituan.com/2018/01/19/mybatis-cache.html 测试代码github地址:https://github.com/kailuncen/mybatis-cache-demo

接下来通过实验,了解MyBatis一级缓存的效果,每个单元测试后都请恢复被修改的数据。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值