2017-09-04 13 views
0

要件::キャッシング中に、キャッシュ用に提供された最大ヒープサイズを超えると、ディスクにオーバーフローしてそこからフェッチする必要があります。 私のehcacheを設定:Spring ehcache - ディスクからキャッシュが取得されない

cache: 
timeToLiveSeconds: 3600 
ehcache: 
maxBytesLocalHeap: 1M 
setMaxBytesLocalDisk: 5G 
diskStore: cacheDiskStore 

これは(上YMLに提供される値で乗っている)ehcache.xml設定です:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" name="CM1" 
updateCheck="false" maxBytesLocalHeap="1M" maxBytesLocalDisk="1M" maxEntriesLocalDisk="100000"> 

<!-- This is a default configuration, it is re-configured by the CacheConfiguration 
    Spring Bean, using the properties from the resources/config/*.yml files. --> 

<diskStore path="cacheDiskStore" /> 

<defaultCache eternal="false" overflowToDisk="true" /> 
<cache name="cache1" > 
    <persistence strategy="localTempSwap" /> 
</cache> 
<cache name="cache2" > 
    <persistence strategy="localTempSwap" /> 
</cache> 

私は大規模なメディアファイルをキャッシュしています。しかし、キャッシュからElementを取得しようとすると、常にnullが返されます。これはキャッシュから取得する方法です。

Element elt = CacheManager.getInstance() 
      .getEhcache("<cacheName>").get(<key>); 
    if (elt != null) { 
     System.out.println("**** Retrieved from cache *****"); 
     return elt; 
    } else { 
     System.out.println("**** NOT FOUND IN CACHE *****"); 
     return null; 
    } 

キャッシュからピッキングされていません。 キャッシュヒープサイズを大きくすると、うまく動作します。どんな助け?

答えて

1

Ehcache 2.xでは、ディスクストアは引き続きキーのヒープを消費します。したがって、ディスク上に保持されているマッピングのキーとヒープ上のマッピングとの間で、追い出しを引き起こすため、キャッシュコンテンツの一部が追い出される可能性があります。

オープンソースのディスクストアは、アプリケーションの終了時にキャッシュマネージャが完全にシャットダウンされた場合にのみ、再起動時のデータを回復することにも注意してください。つまり、CacheManager.shutdown()を呼び出さなければなりません。

+0

こんにちは。ありがとう。どのようにこの追い払いを避けるべきですか? – hack

+0

ヒープサイズを増やしてキャッシュに余裕を持たせることで、自分自身の疑問を解決してください。正確な量とユースケースに最適なものは、テストによって決定されなければなりません。 –

関連する問題