Mybatis基础四(Mybatis一级缓存,二级缓存)

本文介绍了Mybatis的一级和二级缓存机制。一级缓存是SqlSession级别的,会话关闭后失效;二级缓存是全局的,基于namespace,可在配置文件和映射XML中开启及定制。二级缓存回收策略包括FIFO、LRU等,且数据通常需要序列化。
摘要由CSDN通过智能技术生成

Mybatis提供了两个缓存级别:一级缓存,二级缓存。

一、一级缓存

 我们知道Mybatis一级缓存是框架开启的,是属于一个SqlSession级别的缓存(和数据库会话的缓存也就是说它的作用域是会话范围),所以在一级缓存策略没有失效的情况下,同一个会话的重复查询,mybatis只会执行一次请求。后面的相同查询都会直接使用缓存(Map)的内容。

1.1 造成一级缓存失效的情况有四个

1.1.1 我们知道一级缓存的作用域是sqlSession,只要sqlSession对象不同。即使是同一个查下,缓存也是不起作用的。

1.1.2  执行语句的参数不同。会重新执行sql查下。

1.1.3 执行增,删,改,语句,会清空掉缓存

1.1.4  手动执行sqlSession.clearCache方法

二、二级缓存

2.1 二级缓存是全局缓存,是基于namespace级别的缓存(作用域是每个namespace),所以说不同的命名空间就有不同的二级缓存。

2.2 由于一级缓存的作用域是sqlSession范围,比较小,只要会话关闭了,那么它的一级缓存就不存在了,所有这时候我们需要使用二级缓存了。

2.2.1 在一级缓存的会话提交(sqlSession.commit())/会话关闭后(注意),如果mybatis的二级缓存开启,那么它会把一级缓存的数据保存到二级缓存的Map中。

二级缓存配置

要正确的使用二级缓存,需完成如下配置的。

在MyBatis的全局配置文件中开启二级缓存。

在MyBatis的映射XML中配置cache或者 cache-ref 。

cache标签用于声明这个namespace使用二级缓存,并且可以自定义配置。

type:cache使用的类型,默认是PerpetualCache

eviction: 定义回收的策略,常见的有FIFO,LRU。

(1)LRU最近最少使用策略,一处做长时间不被使用的对象。
(2)FIFO先进先出策略,按对象进入缓存的顺序来移除它们。
(3)SOFT软引用策略,移除基于垃圾回收器状态和软引用规则的对象。
(4)WEAK弱引用策略,更积极地移除基于垃圾收集器状态和弱引用规则的对象

flushInterval: 配置一定时间自动刷新缓存,单位是毫秒。

size: 最多缓存对象的个数。

readOnly: 是否只读,若配置可读写,则需要对应的实体类能够序列化。

blocking: 若缓存中找不到对应的key,是否会一直blocking,直到有对应的数据进入缓存。

cache-ref代表引用别的命名空间的Cache配置,两个命名空间的操作使用的是同一个Cache。

注意:默认的情况下,缓存的数据需要使用序列化&反序列,所以一般我们的POJO需要实现序列化接口。

 


 参看
https://blog.csdn.net/yelvgou9995/article/details/81275006 
 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值