SSM学习14:MyBatis缓存

缓存介绍:

MyBatis中使用缓存来提高其性能。
当查询数据时, 会先从缓存中取出数据,如果缓存中没有,再到数据库当中查询

MyBatis中的缓存分为两种

一级缓存是sqlSession级别的,二级缓存是mapper级别的

一级缓存

在这里插入图片描述

会发现只发送一条sql语句

一级缓存失效
1,在两条相同的查询语句中间作增加/插入/更新操作
2,手动调用sqlSession的clearCache()方法
3,如果两次的查询条件不一样,缓存也会失效
4,如果两个查询在不同的sqlsession当中

二级缓存

1,全局作用域缓存 一个namespace对应一个缓存
2,如果会话关闭,一级缓存的数据会被保存到二级缓存中
3,不同namespace查出的数据 ,会放到自己对应的缓存中
4,现在默认也是打开的

二级缓存使用步骤
1.确保在配置文件当中开启二级缓存

SqlMappingConfig.xml
<setting name="cacheEnable" value="true"/>

2.在对应的mapper中添加cache标签.
在这里插入图片描述
3.POJO需要实现Serializable接口
在这里插入图片描述
注意事项
查询的数据都会先放到一级缓存当中
只有会话关闭,一级缓存中的数据才会转称到二级缓存中
比如

sqlSession.close();

之后,会把一级缓存的数据存入到二级缓存中,再创建一个另外sqlSession查询相同内容时,则会从二级缓存中拿出来。

cache标签:
eviction
回收策略

LRU(默认):最近最少使用,移除最长时间不适用的对象
FIFIO:先进先出,按对象进入缓存的顺序移除对象
SOFT:软引入,移除基本垃圾回收器状态和软引入规则的对象(若对象没用,空间不够就移除,空间够不移除)
WEAK:弱引用,移除基本垃圾回收器状态和弱引入规则的对象(若对象没用的话就立马移除)

flushInterval
刷新间隔
默认不清空

默认情况下不设置,没有刷新间隔,缓存调用语句时刷新

readOnly
是否只读

true
告诉Mybatis是只读操作,不去修改数据
Mybatis为了加快获取速度,会直接将缓存的引用将给用, 不安全, 速度快
false
非只读,有可能修改数据
Mybatis会利用序列化和反序列化复制一份给你 速度慢些

==size
可以存放多少个元素 ==
type
可以用来指定自定义的缓存

开发中采用第三方缓存

缓存相关属性
其中localCacheScope为一级缓存的开关
在这里插入图片描述

缓存使用顺序
先到二级缓存当中查找
如果二级缓存中没有,就去找一级缓存
如果一级缓存中也没有就去到数据库当中查询

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值