前提
expiry-delay 10srefresh-ahead-factor 0.5
予想
下の図では赤い三角の時点で新しいデータを取得しています。予想1:10秒感覚で使われるデータが変わる
常に10秒間隔でデータが使用されます。
RDBMSなどのデータソースへのアクセス回数はexpiry-delayだけで見積もれます。
予想2:新たにデータが読み込まれた時点から有効期限が新たに始まる
データが読み込まれてから5秒後に新しいデータを読みに行きます。
RDBMSなどのデータソースへのアクセス回数はexpiry-delayとrefresh-ahead-factorで見積もれます。
結論
結論としては予想2の「新たにデータが読み込まれた時点から有効期限が新たに始まる」です。サンプルソース
RefreshAhead.xmlRefreshAheadLoader.java
refresh-cache
refresh-schema
refresh-schema
10s
com.chirokings.coherence.refresh.RefreshAheadLoader
0.5
package com.chirokings.coherence.refresh;RefreshAheadRun.java
import java.util.Date;
import com.tangosol.net.cache.AbstractCacheLoader;
public class RefreshAheadLoader extends AbstractCacheLoader {
@Override
public Object load(Object arg0) {
Date date = new Date();
System.out.println(date);
return date;
}
}
package com.chirokings.coherence;起動時の引数
import java.util.Date;
import com.tangosol.net.CacheFactory;
import com.tangosol.net.NamedCache;
public class RefreshAheadRun {
public static void main(String[] args) {
NamedCache cache = CacheFactory.getCache("refresh-cache");
Date date = null;
while(true){
Date value = (Date)cache.get("key");
if( date == null || !date.equals(value)){
date = value;
System.err.println("get:"+date);
}
}
}
}
-Dtangosol.coherence.cacheconfig=RefreshAhead.xml -Xms512M -Xmx512M -Dtangosol.coherence.localhost=127.0.0.1 -Dtangosol.coherence.ttl=0出力結果
Sat Jan 29 12:00:00 JST 2011予想1が正の場合は4行目は表示されないはずで、5行目が表示されるタイミングも違うはずです。
get:Sat Jan 29 12:00:00 JST 2011
Sat Jan 29 12:00:05 JST 2011
get:Sat Jan 29 12:05:00 JST 2011
Sat Jan 29 12:00:10 JST 2011
get:Sat Jan 29 12:00:10 JST 2011