一级缓存(本地缓存):sqlSession级别的缓存。一级缓存是一直开启的;
与数据库同一次回话期间查询到的数据会存在本地缓存中。
以后如果需要获取相同的数据,可以直接从缓存中拿,不需要再查询数据库。
一级缓存失效4种情况(没有使用到当前一级缓存的情况,还需要再向数据库发出查询请求):
1、sqlSession不同;
2、sqlSession相同,查询条件不同。(当前一级缓存中还没有这个数据);
3、sqlSession相同,但两次查询之间进行了增删改的操作(这次增删改可能对当前数据有影响);
4、sqlSession相同,手动清楚了一级缓存(缓存清空)。
二级缓存(全局缓存):基于namespace级别的缓存:一个namespace对应一个二级缓存;
工作机制:
1、一个会话,查询一条数据,这条数据就会被放在当前会话的一级缓存中;
2、如果一级缓存关闭,一级缓存中的数据会被保存在二级缓存中,新的会话查询信息,就可以参照二级缓存的内容;
3、不同的namespce查询到的数据会放在自己对应的缓存中(map)。
二级缓存的使用:
1)开启全局二级缓存配置:<setting name="cacheEnabled" value="true"/>
2)在mapper.xml中配置使用二级缓存:<cache></cache>
3)POJO实现序列化接口Serializable