Mybatis:一级缓存和二级缓存

1.一级缓存:
Mybatis的一级缓存在session上,只要通过session查过的数据,都会放在session上,下一次再查询相同id的数据,都直接冲缓存中取出来,而不用到数据库里去取了。
http://how2j.cn/k/mybatis/mybatis-annotation-second-level-cache/1102.html
2.二级缓存
Mybatis二级缓存是SessionFactory,如果两次查询基于同一个SessionFactory,那么就从二级缓存中取数据,而不用到数据库里去取了。
http://how2j.cn/k/mybatis/mybatis-annotation-second-level-cache/1102.html#nowhere

什么叫缓存

    将数据存放在程序内存中,用于减轻数据查询的压力,提升读取数据的速度,提高性能。

一级缓存

■ 两个级别

    SqlSession级别的缓存,实现在同一个会话中数据的共享

    Statement级别的缓存,可以理解为缓存只对当前执行的这一个Statement有效,执行完后就会清空缓存

■ 一级缓存的生命周期和SqlSession一致

■ 设置为SqlSession级别的缓存,当执行insert/update/delete操作或close之后,缓存清空

■ MyBatis的一级缓存最大范围是SqlSession内部,有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据,建议设定缓存级别为Statement

二级缓存

■ SqlSessionFactory级别的缓存,实现不同会话中数据的共享,是一个全局变量

■ 存储作用域为Mapper的namespace级别

■ 可自定义存储源,如 EHCache(分布式缓存框架)

■ 当开启缓存后,数据的查询执行的流程就是二级缓存-> 一级缓存 -> 数据库

■ 不同于一级缓存,二级缓存可设置是否允许刷新和刷新频率

■ MyBatis的二级缓存不适应用于映射文件中存在多表查询的情况,如果多个映射文件对应的Sql操作都使用的是同一块缓存,那么缓存的粒度就变粗了,多个Mappernamespace下的所有操作都会对缓存使用造成影响。

作者:新新许愿树
来源:CSDN
原文:https://blog.csdn.net/qq_41541619/article/details/79967172
版权声明:本文为博主原创文章,转载请附上博文链接!

引申源码链接:https://tech.meituan.com/2018/01/19/mybatis-cache.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值