MyBatis 中存在两级缓存机制:一级缓存(本地缓存)和二级缓存(全局缓存)。

一级缓存(本地缓存):

  • 作用范围: 一级缓存是基于 SqlSession 的缓存,它的作用范围是在同一个 SqlSession 内部。
  • 生命周期: 默认情况下,每个 SqlSession 拥有自己的一级缓存。在进行数据库操作时,查询的数据会被缓存在一级缓存中,当同一个 SqlSession 进行相同的查询时,会先从缓存中查找,如果存在对应数据,则直接返回,不再访问数据库。
  • 失效时机: 一级缓存的数据在提交或关闭 SqlSession 时会失效,也可以通过显式地调用 clearCache() 方法来清除一级缓存。

二级缓存(全局缓存):

  • 作用范围: 二级缓存是全局的,多个 SqlSession 可以共享同一个二级缓存。
  • 生命周期: 数据存储在跨多个 SqlSession 的共享缓存中。当不同的 SqlSession 执行相同的 SQL 查询时,如果开启了二级缓存且符合条件,会先从二级缓存中查找,如果找到数据,则直接返回,不再访问数据库。
  • 配置和使用: 需要在映射文件中开启二级缓存,通过设置 <cache> 标签来启用二级缓存,并在需要使用缓存的实体对应的映射文件中配置 <cache-ref> 引用全局缓存。

需要注意的是,二级缓存默认是关闭的,需要手动进行配置开启,并且对于缓存的对象需要实现序列化接口,以便能够正确地进行序列化和反序列化操作。同时,二级缓存是全局共享的,对于并发操作需要注意缓存的更新机制,避免数据不一致的情况发生。

Was this helpful?

0 / 0

发表回复 0

Your email address will not be published.