所有缓存的基础:
1.什么是缓存
缓存是一个容器,用来存放我们想要的数据
2.缓存的思想
但用户第一次查询的时候,缓存这个容器中还没有数据,此时去查询数据库
查询数据库得到的结果,一方面返回给应用程序,另一方面放到缓存中(容器中)
但用户第二次访问的时候,此时容器中已经有了数据此时直接从容器中获取数据即可,不需要查询数据库了。
3.缓存的开发步骤
if(查看缓存中有没有){
直接从缓存中取出
}else{
//查询数据库,返回数据,把数据存放到缓存中
}
4.缓存的好处:
①快速 速度高(前提把缓存放到内存中)
②减少与数据库的交互,减小mysql的压力
③提高用户体验
5:缓存的弊端:
查询出来的数据和真实的数据可能存在不一致的情况,导致数据不同步
6:如何解决这个弊端:
在进行数据修改的时候,把缓存清除掉
或者定时实时同步
mybatis缓存的基础:
第一种:一级缓存(默认开启)
一级缓存是sqlSession级别的缓存,可以这样理解:通过同一个sqlSession获得的对象,操作同样的方法,都会有一级缓存
存储:是一个Map集合,存储在内存中。key里面保存查询语句,条件,元信息等(可以看出来并不保存对象,所以和对象无关),value里面存放查询出来的结果
但是:SSM整合时,一级缓存失效
第二种:二级缓存
二级缓存是sqlSessionFactory级别的缓存
二级缓存是nameSpace级别下的缓存(说明要在mybatis_config.xml的namespace里面放入<cache/>)
也就是说,通过同一个sqlSessionFactory获得sqlSession,再获得mapper调用同样的方法会有二级缓存。
二级缓存:也是Map集合,可能存在内存中,也可能存在硬盘上(所以实体类要实现可序列化接口)
key:查询语句,条件,元信息等组成,value里面存放查询出来的结果