1.1 一级缓存
- 像大多数的持久化框架一样,mybatis也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。Mybatis中分为一级缓存和二级缓存。
- 一级缓存是基于SQLSession的缓存,一级缓存的内容不能跨SQLSession。由mybatis自动维护。
- 二级缓存是基于映射文件的缓存(namespace),缓存范围比一级缓存更大,不同的SQLSession可以访问二级缓存的内容。哪些数据放入二级缓存需要自己指定。(常用,不经常修改,例如:类别,部门)
1.2 二级缓存
二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个 SqlSession可以共用二级缓存,二级缓存是跨 SqlSession 的。
首先开启 mybatis 的二级缓存。
sqlSession1 去查询用户信息,查询到用户信息会将查询数据存储到二级缓存中。
sqlSession2 去查询与 sqlSession1 相同的用户信息, 首先会去缓存中找是否存在数据,如果存在直接从缓存中取出数据。如果 SqlSession3 去执行相同 mapper 映射下 sql,执行 commit 提交, 将会清空该 mapper 映射下的二级缓存区域的数据。
1.3 Redis和Mybatis都有缓存,具体使用哪个呢?
可以使用Mybatis操作redis
哪个缓存更好?
Redis可以集群缓存
Mybatis只适合单机缓存,mybatis的缓存没有持久化