MyBatis缓存

简介: MyBatis缓存

一级缓存

缓存介绍

MyBatis中使用缓存来提高其性能。当查询数据时, 会先从缓存中取出数据,如果缓存中没有,再到数据库当中查询,MyBatis中的缓存分为两种:一级缓存和二级缓存,一级缓存是sqlSession级别的,二级缓存是mapper级别的。

一级缓存

本地缓存 (默认开启),在sqlSession没有关闭之前,再去查询时, 会从缓存当中取出数据,不会重新发送新的sql。

一级缓存失效

如果在查询之前,执行了增\删\改 缓存就会失效,手动清空缓存,如果两次的查询条件不一样,缓存也会失效

如果两个查询在不同的sqlsession当中。

二级缓存

二级缓存介绍

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

二级缓存使用步骤

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

2.在对应的 mapper 中添加 cache 标签

eviction:回收策略

flushInterval:刷新间隔,默认不清空

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

size:可以存放多少个元素

type:可以用来指定自定义的缓存

3.POJO需要实现Serializable接口

注意事项

查询的数据都会先放到一级缓存当中,只有会话关闭,一级缓存中的数据才会转称到二级缓存中

缓存相关属性

cacheEnabled

只能控制二级缓存的开关

select中useCache

控制的也是二级缓存是否使用

增删改标签中flushCache

一级和二级都会被清空,增删改 flushCache 默认为 true,查询flushCache默认为false

sqlSession.clearCache()

只清除当前session的一级缓存

localCacheScope

本地缓存作用域

取值:SESSION、STATEMENT

STATEMENT 可以使用它禁用缓存

缓存使用顺序

先到二级缓存当中查找

如果二级缓存中没有,就去找一级缓存

如果一级缓存中也没有就去到数据库当中查询

相关文章
|
21天前
|
缓存 Java 数据库连接
Mybatis缓存相关面试题有多卷
使用 MyBatis 缓存机制需要注意以下几点: 对于频繁更新和变动的数据,不适合使用缓存。 对于数据的一致性要求比较高的场景,不适合使用缓存。 如果配置了二级缓存,需要确保缓存的数据不会影响到其他业务模块的数据。 在使用缓存时,需要注意缓存的命中率和缓存的过期策略,避免缓存过期导致查询性能下降。
48 0
|
21天前
|
缓存 Java 数据库连接
【Mybatis】说一下 mybatis 的一级缓存和二级缓存
【Mybatis】说一下 mybatis 的一级缓存和二级缓存
|
21天前
|
缓存 Java 数据库连接
MyBatis三级缓存实战:高级缓存策略的实现与应用
MyBatis三级缓存实战:高级缓存策略的实现与应用
40 0
MyBatis三级缓存实战:高级缓存策略的实现与应用
|
21天前
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
117 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景
|
21天前
|
存储 缓存 Java
探秘MyBatis缓存原理:Cache接口与实现类源码分析
探秘MyBatis缓存原理:Cache接口与实现类源码分析
39 2
探秘MyBatis缓存原理:Cache接口与实现类源码分析
|
21天前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
21天前
|
缓存 Java 数据库连接
mybatis 数据库缓存的原理
MyBatis 是一个流行的 Java 持久层框架,它封装了 JDBC,使数据库交互变得更简单、直观。MyBatis 支持两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache),通过这两级缓存可以有效地减少数据库的访问次数,提高应用性能。
290 1
|
21天前
|
存储 缓存 Java
【MyBaits】4、延迟加载、MyBatis 的缓存
【MyBaits】4、延迟加载、MyBatis 的缓存
24 0
|
21天前
|
SQL 缓存 Java
mybatis缓存详解
mybatis缓存详解
27 0
|
21天前
|
缓存 Java 数据库连接
mybatis的缓存内容(下)
mybatis的缓存内容
33 0