数据查询首先去二级缓存查找,如果没有就去一级缓存查找,如果还是没有就去数据库查询。
本地缓存:基于PerpetualCache,本质是一个HashMap。
一级缓存:基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当Session进行增删改之后,该Session中的所有Cache(缓存)就将清空,默认打开一级缓存。
二级缓存:是基于namespace和mapper的作用域起作用的,不是依赖于SQLsession,默认也是采用 PerpetualCacheHashMap 存储。默认关闭,打开需要两步。
1、全局配置文件
<settings>
<setting name="cacheEnabled" value="true"
</settings>
2、映射文件
使用<cache/>标签让当前mapper生效二级缓存
二级缓存
注意事项:
1,对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存Namespaces)的进行了新增、修改、删除操作后,默认该作用域下所有 select 中的缓存将被 clear。
2,二级缓存需要缓存的数据实现Serializable接口。
3,只有会话提交或者关闭以后,一级缓存中的数据才会转移到二级缓存中。
一般面试会问:
Mybatis的一级、二级缓存的区别?
Mybatis的二级缓存什么时候会清理缓存中的数据?