2017-12-20 6 views
0

現在、私はWebアプリケーション用にSpring Webフレームワークを使用しています。私は、ehcache.xmlを読み込み、CacheManagerを作成し、キャッシュから要素を取得したり、要素をキャッシュに追加するために使用される、基本的なCacheConfig.javaファイルを実装しました。次のように私のehcache.cmlは次のとおりです。オブジェクトの新しいバージョンを正常に取得したときにのみ期限切れのオブジェクトを置き換えるようにehcacheを設定する方法

<cache name="Cache" 
     maxEntriesLocalHeap="100" 
     maxEntriesLocalDisk="0" 
     eternal="false" 
     diskSpoolBufferSizeMB="0" 
     timeToIdleSeconds="43200" 
     timeToLiveSeconds="43200" 
     memoryStoreEvictionPolicy="LFU" 
     > 
    <persistence strategy="none"/> 

最初の要素の古いバージョンが削除されますないだけ正常な取得にとバックエンドデータベース(SOR)からオブジェクトを探すことでリフレッシュされるどのように私はそのキャッシュを確保することができます?

EDIT:リフレッシュヘッド戦略のためのCacheLoader。

public class TestCacheLoader implements CacheLoader { 
@Override 
public Object load(Object key) throws CacheException { 
    //return null; 
    return load(key,null); 


} 

@Override 
public Map loadAll(Collection keys) { 
    //return null; 
    return loadAll(keys,null); 
} 

@Override 
public Object load(Object key, Object argument) { 
    Object obj = null; 
    try { 
     obj = ReadFromDatabase(key); 
    } catch (DatabaseValueNotFoundException e) { 
     **How can I return the old value here?** 
    } 
    return obj; 
} 

@Override 
public Map loadAll(Collection keys, Object argument) { 
    //return null; 
    Map newValues = new HashMap<Object,Object>(); 
    for(Object key : keys){ 
     Object value = load(key,null); 
     if(value != null){ 
      newValues.put(key,value); 
     } 
    } 
    return newValues; 
} 

@Override 
public String getName() { 
    return null; 
} 

@Override 
public CacheLoader clone(Ehcache ehcache) throws CloneNotSupportedException { 
    return null; 
} 

@Override 
public void init() { 

} 

@Override 
public void dispose() throws CacheException { 

} 

@Override 
public Status getStatus() { 
    return null; 
} 

}

答えて

0

あなたが求めるものを行うためのボックスのサポートのないうちはありません。

Ehcache 2.xはrefresh aheadをサポートしています。scheduled refresh aheadでさらに調整できます。あなたが求めているものではありませんが、十分に近いかもしれません。

**質問が編集された後の追加は**

DBは、もはやそのキーのエントリを持っているので、どのようなあなたの編集が示唆する代わりに、そこにユーザーに伝える、あなたは古い値を維持したいということではありません値なしです。ここでもまた、キャッシュの原則に反して、それに対するサポートはありません。

+0

私の編集をご覧ください。キャッシュローダーは値をロードするキャッシュ内の値にアクセスできないため、古い値をキャッシュに戻す方法はわかりません。 –

関連する問題