一、mybatis 二级缓存
1、mybatis 的一级缓存是SqlSession。
2、mybatis 的二级缓存是基于同一命名空间(namespace) mapper。
3、mybatis 默认二级缓存未开启、内置是支持二级缓存的。但是由于本身是数据库管理组件、所以缓存并不好用、所以还是要用第三方的缓存机制。典型的:ehcache 。
二、二级缓存的常见算法
* LRU(Least Recently Used):这种算法是在每个对象中维护一个访问的时间变量,每次访问后,时间都会更新,当新的对象需要存放到缓存时,替换那个按时间排序最后的对象。
* LFU(Least Frequently Used):这种算法是每个对象记录了对象访问的次数(即命中率),当新的对象需要存放到缓存时,替换那个访问次数最少的对象。
* FIFO(First In First Out):这种算法是将缓存中的对象存放成一个数组,当新的对象需要存放到内存中是,替换最先存放到缓存的对象。
三、mybatis 中开启二级缓存
1、使用mybatis自带的二级缓存
1).对象要实现 Serializable 接口
2).在mapper.xml映射文件中添加
<!-- 开启缓存 -->
<cache/>
3).在mybatis-config.xml中添加
<!-- 开启二级缓存 -->
<setting name="cacheEnabled" value="true"/>
2、使用第三方缓存(集成ehcache)
1). 导入jar包
* mybatis-ehcache-1.1.0.jar
* ehcache-2.10.3.jar
* slf4j-api-1.7.7.jar
2).生成ehcache.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!-- 配置文件缓存溢出后存储位置 -->
<diskStore path="c:/ehcache"></diskStore>
<!--
maxElementsInMemory : 缓存的最多个数
eternal : 对象永久有效、一旦设置为true、那么timeout就无效
timeToIdleSeconds : 设置对象失效前空闲的最大时间、当设置eternal="false"、才能起效
timeToliveSeconds : 设置对象失效前可以存活多少秒、设置0、表示永久有效
overflowToDisk : 溢出时写入硬盘
-->
<defaultCache maxElementsInMemory="100000" eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"/>
</ehcache>
3).在mybatis-config.xml中开启二级缓存
4).在mapper文件中指定cache类型为ehcache
<!-- 开启二级缓存 -->
<cache type="org.mybatis.caches.ehcache.EhcacheCache" ></cache>