什么是缓存?
当用户对于数据库进行查询时,数据库就会把该次查询的数据进行缓存。当用户再一次进行相同的数据库查询操作,就不会对数据库进行查询,而是直接进缓存中拿取数据,减少数据库的负担。(读写分离)
一级缓存
一级缓存也就是本地缓存。是SqlSession级别的,作用在一次会话之间,也就是在创建SqlSession和关闭Sqlsession(session.close())之间。是mybatis的默认缓存机制。在用户进行查询语句后,下一次会话之间,下一次进行相同的查询语句,不会查询数据库,而是直接走一级缓存中的数据。
注意:
1、在执行查询语句后,进行增删改等操作,会删除一级缓存的数据(因为可以会对数据进行修改)
2、在不同的SqlSession中的一级缓存并不通用。(也就是两个SqlSession对像之间一级缓存的数据不同)
3、一级缓存可以使用SqlSession.cleaCache()进行手动清楚
4、一级缓存中会有时间机制,过一段时间会自动清除缓存
二级缓存
二级缓存是基于多个SqlSession共享数据的缓存机制,二级缓存的级别是Mapper级别(也就是一个配置文件之间)。二级缓存是当用户进行数据库查询数据之后,存入一级缓存之中,一级缓存(sqlSession)关闭后,一级缓存的数据就会存入二级缓存中,进行数据共享。但是二缓存页存在并发问题,在对数据进行删除增加修改后,二级缓存中的数据也会清空,来确保数据的准确性。
注意:
1、配置开启二级缓存:在MyBatis的配置文件中,需要设置
2、明确哪些Mapper使用二级缓存:在Mapper接口对应的XML文件中,使用
3、实现序列化:如果缓存的对象需要被序列化,确保实体类实现了Serializable接口。
4、注意缓存的有效范围和生命周期:可以通过配置相关参数来调整缓存的最大大小、存活时间和清除策略。
开启二级缓存的步骤:
1、在mybatis中指定位置文件的二级缓存
<!-- 指定开启二级缓存 name="cacheEnabled" mybatis指定 value可以修改 - -->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
2、在配置文件中开启二级缓存
<!-- 手动开启二级缓存-->
<cache/>
<!-- 或者第二种写法
eviction="FIFO" :设置清楚缓存的策略,先进先出策略
flushInterval="6000" :设置默认清除二级缓存的时间60秒
size="512" :缓存的数据长度,默认是512
-->
<cache
eviction="FIFO"
flushInterval="60000"
size="512"/>
示例:
对实体类进行序列化:
实现二级缓存