目录
MyBatis 的缓存机制分为一级缓存、二级缓存和三级缓存。
1. 一级缓存
一级缓存是 MyBatis 会话级别的缓存,也称为本地缓存。每个 SqlSession 会维护自己的一级缓存。在同一个 SqlSession 中,如果执行查询操作,对于相同的 SQL 语句,MyBatis 会先在这个会话的一级缓存中查找,如果找到就直接返回,而不再去执行数据库查询。一级缓存的作用范围是 SqlSession 的生命周期。
2. 二级缓存
二级缓存是 MyBatis 全局范围内的缓存,允许多个 SqlSession 共享同一个缓存。二级缓存的配置和使用需要在 MyBatis 的配置文件中进行设置。可以通过配置 `mapper` 中的 `cache` 标签来启用二级缓存。一旦启用,MyBatis 会将查询结果放入二级缓存中,这样不同的 SqlSession 就可以共享这些缓存的查询结果,从而减少对数据库的访问。
3. 三级缓存
实际上,MyBatis 并没有官方文档提到“三级缓存”的概念,通常我们所说的三级缓存是指:
(1)本地的 JVM 缓存:指的是应用程序的内存结构,例如 HashMap 等。
(2)二级缓存:由 MyBatis 提供,允许在 SqlSession 间共享的缓存。
(3)数据库缓存:比如数据库系统自带的查询缓存。
如果看到“三级缓存”,其实通常指的是整合了本地缓存、MyBatis 的二级缓存以及数据库自身的缓存。具体实现通常依赖于应用程序的架构和使用的数据库的特性。
4.小结
(1)一级缓存:(SqlSession 内部)是自动的,不需要额外配置。
(2)二级缓存:(个 SqlSession 之间)相对复杂,需要手动配置。
(3)三级缓存:的概念不属于 MyBatis 的专有术语,但可以理解为应用程序缓存与数据库自身的缓存机制。
在使用缓存时,需要注意数据的一致性和过期策略,以避免缓存击穿和缓存污染等问题。对于频繁更新的数据,可能不适合使用缓存。