开启缓存
默认情况下,缓存没有开启。要开启缓存,在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"/>
这个含义是,回收策略为先进先出。最多保存512个引用,引用返回的对象是只读的,每隔60秒刷新一次
可用的收回策略有:
LRU – 最近最少使用的:移除最长时间不被使用的对象。
FIFO – 先进先出:按对象进入缓存的顺序来移除它们。
SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。
WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象
默认的是 LRU。
自定义缓存
<cache type=”com.domain.something.MyCustomCache”/>
定义的缓存要实现以下接口即可
public interface Cache { String getId(); int getSize(); void putObject(Object key, Object value); Object getObject(Object key); boolean hasKey(Object key); Object removeObject(Object key); void clear(); ReadWriteLock getReadWriteLock(); }
调用自定义缓存的方法
<cache type=”com.domain.something.MyCustomCache”> <property name=”cacheFile” value=”/tmp/my-custom-cache.tmp”/> </cache>
这会调用MyCustomCache的setCacheFile方法
在语句上设置缓存
<select ... flushCache=”false” useCache=”true”/> <insert ... flushCache=”true”/> <update ... flushCache=”true”/> <delete ... flushCache=”true”/>
如果当前映射文件要使用别的映射文件中的缓存设置
<cache-ref namespace=”com.someone.application.data.SomeMapper”/>