日期:2014-05-16 浏览次数:20482 次
开启缓存
默认情况下,缓存没有开启。要开启缓存,在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”/>?
?