缓存
MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。

一级缓存[本地会话缓存](默认开启):
比如在一个方法中sqlSession 创建后可以多次调用其方法 等到sqlSession.close 后就全部失效
一级缓存失效的情况:
1.查询不同的东西
2.增删改操作(因为可能会改变原来的数据,必定会刷新缓存)
3.查询不同的mapper.xml
4.手动清除缓存 sqlSession.clearCache()
二级缓存(也叫全局缓存,诞生是因为一级缓存作用域太低)
基于namespace,在一个mapper范围内全部生效

默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件(映射接口中方法的xml文件)中添加一行(这个是设置二级缓存属性,开启的话是在config文件中):
<cache/>

步骤:
1.需要提前开启全局缓存 在设置settings 里面 设置
<setting name="cacheEnabled" value="true"/>
2.在需要的mapper.xml中加入标签(标签可以自定义一些属性,一般默认的就行)
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/> 这个更高级的配置创建了一个 FIFO 缓存,每隔 60 秒刷新,最多可以存储结果对象或列表的 512 个引用,
而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者产生冲突。

缓存流程图

额外补充
单条sql语句也能设置缓存相关 利用标签里面的
***userCache属性(是否缓存) false不缓存(变更次数频繁的时候用)
***flushCashe属性(是否刷新) false不刷新
<dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.2.1</version> </dependency>
在cache里面加入type标签
<cache type="org.mybatis.caches.ehcache.EhcacheCache" />
ehcache.xml
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false"> <diskStore path="./tmpdir/Tmp_EhCache"/> <defaultCache eternal="false" maxElementsInMemory="10000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="259200" memoryStoreEvictionPolicy="LRU"/> <cache name="cloud_user" eternal="false" maxElementsInMemory="5000" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="1800" timeToLiveSeconds="1800" memoryStoreEvictionPolicy="LRU"/> </ehcache>
Redis K-V键值对

浙公网安备 33010602011771号