以作用域来区分缓存分为: 一级缓存(sqlsession,默认开启)、二级缓存(namespace,默认关闭),都默认也是采用 PerpetualCache,HashMap 存储。
一级缓存:
默认开启,作用于sqlsession。
执行第一次查询时,会将数据存到(这个sqlsession)一级缓存中;之后如果执行了更新操作,就会清空缓存;而第二次执行相同的查询时就会先到缓存中查询是否存在对应的数据;在连接关闭后会自动清空缓存。
二级缓存
默认关闭,需要在mybatis总的配置文件中、mapper文件中设置开启,若其中某一个SQL语句不需要开启二级缓存也可以直接设置关闭二级缓存。这时实体类实现序列化接口,因为缓存不一定是存在内存中的;
数据库更新操作后,默认该作用域下所有 select 中的缓存将被清空;
二级缓存适用于:查询多、实时性要求不高的业务。比如数据的统计等等;设置刷新时间间隔,mybatis会每个一段时间自动清空缓存。
缺点:对于细粒度的信息的缓存实现效果很差。比如:人员信息,当一个人的信息发生改变后,缓存就会清空。这时候就需要对数据有针对性的缓存(三级缓存,也叫业务缓存);
分布式缓存
使用分布式框架(常见的有:redis、ehcache、memcached) 对缓存进行集中管理;
实现方式:只需实现mybatis的cache接口,就可以实现自己的缓存逻辑;
1、在总配置文件中整合框架
< cache type=“具体类型”/>
2、在建立一个缓存框架的配置文件