跳到主要内容

mybatis详解-(19)二级缓存

默认情况下是只开启了局部的sqlSession缓存(一级缓存),可以增强变现而且处理循环 依赖也是必须的。

1.缓存配置

要开启二级缓存,需要做一些配置
1)开启所有映射器中缓存配置:
将value设置为true

<settings>
<setting name="cacheEnabled" value="true"/>
</settings>

2)需要在你的 SQL 映射文件中添加一行:

<cache/>

字面上看就是这样。这个简单语句的效果如下:

·映射语句文件中的所有 select 语句将会被缓存。
·映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
·缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
·根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
·缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
·缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

所有的这些属性都可以通过缓存元素的属性来修改。比如:

<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>

这个更高级的配置创建了一个 FIFO 缓存,并每隔 60 秒刷新,存数结果对象或列表的 512 个引用,而且返回的对象被认为是只读的,因此在不同线程中的调用者之间修改它们会 导致冲突。

可用的收回策略有:

·LRU – 最近最少使用的:移除最长时间不被使用的对象。
·FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
·SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
·WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

默认的是 LRU。

flushInterval(刷新间隔)可以被设置为任意的正整数,而且它们代表一个合理的毫秒 形式的时间段。默认情况是不设置,也就是没有刷新间隔,缓存仅仅调用语句时刷新。