一级缓存是mybatis天然自带的,是默认开启且没有关闭的地方,1级缓存只能作用于查询回话中,所以也叫会话缓存;
这里举个例子:
订单表存在一对多的关系,为了尽可能的减少join的查询,进行了分阶段查询; 先查询出订单表,在根据订单的用户id查询用户信息表,最后将数据进行整合。如果订单表中存在重复的用户id,就会出现很多没有必要的重复查询。 1级缓存解决了这个问题(1个语句被执行多次,也就是大家说的“n+1”的问题),在同一次查询回话中如果出现相同的语句及参数,就会从缓存中取出,不会直接从数据库端拉取数据。
一级缓存又称为本地缓存,大致限制如下:
实现了cache接口——perpetualcache类,cache变量就是一个简单的hashmap,所以一级缓存就是通过hashmap实现的;
这里需要特别注意一下:
因为是基于hashmap实现,在查询时另一个会话并发去修改查询的数据的时候,一级缓存会有效,也就是非线程安全,存在并发问题,但是一级缓存又是属于本地缓存而且基于当前会话,所以这个并发问题可以忽略,您难道在自己的代码里还要实现内部并发吗?:);
后续可能持续更新
如对本文有疑问, 点击进行留言回复!!
Excel导出 POI 响应头设置 Content-Type: application/vnd.ms-excel 异常解决方法
荐 (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
Lombok的@Data、@Accessors、@EqualsAndHashCode使用细节
根据 日期时间 工具类 计算 . 从 你出生到今天 一共经历多少天
网友评论