什么是二级缓存?
一级缓存是在两次发送同一个SQL请求,第一次执行完,就把数据存储在sqlsession中,第二次是从缓存中取出的数据,也就是说前后就只执行了一次SQL语句。
但每次SqlSession一关闭,一级缓存中的数据就消失。所以用到了二级缓存。
所以从这个角度讲:能跨sqlSession的缓存为二级缓存!
1、一个会话,查询一条数据,这个数据就会被放在当前会话的一级缓存中。
2、如果会话关闭,一级缓存中的数据会被保存到二级缓存中;新的会话查询信息,就可以参照二级缓存中。
步骤:
第一步:
在mybatis配置文件中,
开启全局二级缓存配置:<setting name="cacheEnabled" value="true"/>
第二步:
在xxxMapper.xml中配置二级缓存
<cache eviction="FIFO" flushInterval="60000" readOnly="false" size="1024" type=""></cache>
flushInterval设置的是刷新的时间,单位是毫秒。
readOnly:是否只读,true/false
true:只读缓存;mybatis认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。
mybatis为了加快获取速度,直接就会将数据在缓存中的引用交给用户。不安全,速度快。
false:非只读:mybatis觉得获取的数据可能会被修改。
mybatis会利用序列化&反序列化的技术克隆一份。安全,速度慢。
type:指定自定义缓存的全类名
size:缓存的对象的数目,默认是1024个。
eviction:达到缓存的极限,新进缓存对象的替换方式。
第三步:
将缓存的对象实现序列化接口。
第四步:
在第一次操作之后记得关闭sqlsession。只有在sqlsession关闭之后,才会把数据方法二级缓存空间。