MyBatis(一)-----MyBatis中的一级缓存

一.概述

1.MyBatis跟缓存相关的类都在cache包里面,其中有一个Cache接口,只有一个默认的实现类PerpetualCache,它是用HashMap实现的,除此之外,还有很多的装饰器,通过这些装饰器可以额外实现很多的功能
在这里插入图片描述
2.所有的缓存实现类总体可分为三类:
基本缓存,淘汰算法缓存,装饰器缓存
在这里插入图片描述
在这里插入图片描述

二.一级缓存

1.特点:

1)一级缓存是在会话(SqlSession)层面进行缓存的
2)默认是开启的,不需要任何的配置
3)PerpetualCache对象是放在Executor里面维护的-------SimpleExecutor/ReuseExecutor/BatvhExecutor的父类BaseExecutor的构造函数中持有了PerpetualCache,而Executor是DefaultsqlSession里面的一个属性

在这里插入图片描述
在这里插入图片描述
在同一个会话里面,多次执行相同的 SQL 语句,会直接从内存取到缓存的结果,不 会再发送 SQL 到数据库。但是不同的会话里面,即使执行的 SQL 一模一样(通过一个 Mapper 的同一个方法的相同参数调用),也不能使用到一级缓存。
在这里插入图片描述

2.一级缓存什么时候会失效?

答:在同一会话中,uodate会导致一级缓存被清空

3,如果跨会话,会出现什么问题?

其他会话更新了数据,导致读取 到脏数据(一级缓存不能跨会话共享)

4.一级缓存的不足:

使用一级缓存的时候,因为缓存不能跨会话共享,不同的会话之间对于相同的数据可能有不一样的缓存,在有多个会话或者分布式环境下,会存在脏数据的问题,如果要解决这个问题,就要用到二级缓存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值