Mybatis的缓存机制——高频率面试题

Mybatis的缓存机制

缓存(Cache):将原本需要查询的数据暂时存储到其它更易于读取的位置,并且,在后续查询数据时,从新的位置获取数据。

例如:通常查询数据是从数据库(例如MySQL等)位置进行查询,但是,MySQL的查询数据的效率其实很低!使用缓存的做法,可以是将前序的查询结果保存下来(不销毁),当下次再次查询同样的数据时,直接将此前保存下来的结果返回出去即可!

提示:关于将前序的查询结果保存下来,可以保存到应用服务器上,也可以保存在其它能够高效获取数据的位置。

Mybatis框架内置了缓存机制,分别是一级缓存(L1 Cache)和二级缓存(L2 Cache)。

**关于一级缓存:**通常也称之为Session缓存,或会话缓存,它是基于Mybatis的Session机制的,是默认开启的,人为不可控。

一级缓存的特点:必须是同一个会话(SqlSession)、同一个Mapper、执行同样的查询、查询的参数相同,则后续的查询会直接使用前序的查询结果,并不会反复执行查询!

一级缓存还有一些特点:如果更换SqlSession,则会重新查询,如果SqlSession关闭或调用了clearCache()方法,则缓存数据会清空,或者,此表的数据发生了任何写(增删改)操作,缓存数据也会清空!

**关于二级缓存:**通常也称之为namespace缓存,在Spring Boot整合Mybatis的项目中,默认是全局开启,但各namespace默认未开启的!

二级缓存的特点:无论是否同一会话,只要是同一个namespace中的多次查询,均可应用二级缓存,Mybatis在查询数据时,会先检查二级缓存,如果命中,将直接返回结果,如果未命中,则检查一级缓存,如果命中则返回结果,如果仍未命中,则连接数据库执行查询。

二级缓存的使用:需要在配置SQL的XML文件中添加节点,表示开启当前namespace的缓存。

如果同一个namespace执行了任何写操作,都会导致二级缓存数据被清空!

注意:使用二级缓存时,用于封装查询结果的类型必须实现Serializable接口,否则查询时将出现异常!

另外,一旦使用了,则当前namespace中所有的查询都是开启了二级缓存的,如果部分查询功能并不需要开启二级缓存,还可以在节点上配置useCache=“false”。

结论:无论是一级缓存,还是二级缓存,都会因为发生了写操作而自动清空,这种机制通常并不满足生产环境的需求,所以,一般不会使用Mybatis的缓存机制!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别来无恙blwy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值