1.简介
查询 : 连接数据库 , 耗资源! 一次查询的结果,让他暂存在一个可以直接取到的地方! -->内存 : 缓存
我们再次查询相同的数据时,就直接走缓存,不走数据库了。
2.一级缓存
测试步骤:
1.开启日志
2.测试在与一个Session中查询两次相同的记录
3.查看日志输出
缓存失效的情况:
1.查询不同的东西
2.增删改操作,可能会改变原来的数据,所以一定会刷新缓存!
3.查询不同的Mapper.xml
4.手动清理缓存
一级缓存就是一个map。
sqlSession.clearCache(); //手动清理缓存
3.二级缓存
步骤:
1.开启全局缓存
<settings>
<!-- 开启全局缓存-->
<setting name="cacheEnable" value="true"/>
</settings>
2.在要使用二级缓存的mapper中开启
<!-- 在当前Mapper.xml中使用二级缓存-->
<cache eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
3.测试
小结:
1.只要开启了二级缓存,在同一个Mapper下有效
2.所有的数据都会先放在一级缓存中
3.只有当会话提交,或者关闭的时候,才会提交到二级缓存中
4.缓存原理
5.自定义缓存-ehcache
Ehcache是一种广泛使用的开源Java分布式缓存。
要在程序中使用ehcache,要导包!
<!-- https://mvnrepository.com/artifact/org.mybatis.caches/mybatis-ehcache -->
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.1.0</version>
</dependency>