目录
一级缓存
二级级缓存
第三方缓存
缓存机制:将执行后的sql语句存储在缓存(硬盘)中,下次执行相同的sql的时候,就从缓存中取。mybatis中默认会开启一级缓存。
一级缓存
默认开启一级缓存,是sqlsession级别的,所以不需要手动设置,在使用sqlsession对象操作数据库的时候,使用sql语句,就会自动使用一级缓存。注意:一级缓存失效的几种情况:
- 不同的sqlsession对应不同的一级缓存。
- 同一个sqlsession但是不同的查询条件。
- 同一个sqlsession两次查询期间执行了任何一次增删改操作。
- 同一个sqlsession两次查询期间手动清空了缓存。
二级缓存
默认不开启,访问同一个映射文件就会进行缓存,是映射级别的。需要手动开启。(1) 开启二级缓存的步骤级注意点:
- 在配置文件的setting标签中配置 name=“cacheEnabled” value=“true”
- 在需要使用二级缓存的映射文件中,配置缓存cache标签
- 需要在实体类中实现Serializable接口
注意:需要在sqlsession关闭 或 提交后才能生效。
(2) 二级缓存的相关属性:
- eviction=“FIFO”,缓存回收策略。
LRU-最近最少使用的:移除最长时间不被使用的对象。
FIFO-先进先出:按对象的先后顺序来移除。
SOFT-软引用:移除基于垃圾回收器状态和引用规则的对象。
WEAK-弱引用:移除基于垃圾回收器状态和弱用规则的对象。 - flushInterval:刷新间隔,单位为毫秒。默认没有刷新间隔,缓存只是在调用语句时刷新。
- size:引用数目,代表缓存最多可以存储多少个对象,太大容易导致内存溢出。
- readOnly:只读,
true:只读缓存,返回缓存对象的相同实例,
false:读写缓存,返回缓存对象的拷贝。
(3) 缓存的相关属性的设置
-
全局setting的cacheEnable:配置二级缓存开关,一级缓存一直开着。
-
select标签中的useCache:是否使用二级缓存,一级缓存一直使用。
-
sql标签的flushCache:增删默认为true,sql执行后,同时清空缓存。查询默认为false。
-
sqlsession.clearCache():只是用来清除一级缓存。
返回顶部
第三方缓存
使用EhCache是一个纯java的进程内缓存框架。是Hibernate中默认的CacheProvider(1) 导入jar包
ehcashe-core、mybatis-ehcashe、slf4j-api、slf4j-log4j
(2) 配置ehcashe.xml配置文件
<?xml version="1.0" encoding="UTF-8">
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:onNamespaceSchemaLocation="../config/ehcache.xsd">
<!--磁盘保存路径-->
<diskStore path="D:\atguigu\ehcache" />
<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="10000000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
>
</defaultCache>
</ehcache>
(3) 配置cache
<cache type="org.mybatis.caches.ehcache.EhcacheCache"></cache>