8

EhCacheのドキュメントで述べたように:

実際には、これは永続的なメモリ内キャッシュがディスク上のすべての要素で起動することを意味します。[...] そのため、Ehcache の設計では、起動時にすべてをメモリにロードするのではなく、必要に応じて遅延ロードします。

メモリ キャッシュがメモリ内のすべての要素を起動するようにしたいのですが、どうすれば実現できますか?

これは、当社の Web サイトがキャッシュへのアクセスを頻繁に実行するため、初めて Web サイトにアクセスしたときの応答時間が非常に遅くなるためです

4

1 に答える 1

5

キャッシュされたすべての要素がDiskStoreにあり、アプリケーションが起動するとすぐにそれらをメモリ内に配置することを想定しています。いずれにせよ、BootStrapCacheLoaderとBootstrapCacheLoaderFactoryを使用すると役立つはずです。

アプリケーションの起動後にDiskStoreをメモリにロードする場所を示しています。

以下のようにキャッシュ要素をロードするBootstrapCacheLoaderを実装できます。メソッドBootstrapCacheLoader.load(Ehcache cache)の定義は次のようになります。

       //CustomBootstrapCacheLoader implements BootstrapCacheLoader


        List<?> keys = cache.getKeys();

        if ((keys == null) || keys.isEmpty())
        {
            return;
        }

        for (Object key : keys)
        {
           Element el = cache.getQuiet(key);
           cache.removeQuiet(key);
           cache.putQuiet(el);
        }

上記のメソッドは、DiskCacheから要素を読み取り、それを削除して元に戻し、メモリに残り、ディスクバージョンが削除されるようにします。

BootstrapCacheLoaderFactoryを実装して、

public class CustomBootstrapCacheLoaderFactory extends BootstrapCacheLoaderFactor
{
.
.
@Override
public BootstrapCacheLoader createBootstrapCacheLoader(Properties properties)
{
    CustomBootstrapCacheLoader loader = new CustomBootstrapCacheLoader();
    loader.setAsynchronous(getAsyncFromProperty(properties));

    return loader;
}
.
.
}

以下のようにCustomBootstrapCacheLoaderFactoryを使用して、以下のようにキャッシュ構成を定義できます。

<cache
         name="DummyCacheEl"
         maxElementsInMemory="3500"
         eternal="true"
         overflowToDisk="false"
         diskPersistent="true"
         memoryStoreEvictionPolicy="LRU">
         <bootstrapCacheLoaderFactory class="CustomBootstrapCacheLoaderFactory"  properties="async=true"/>
</cache>  
于 2012-05-09T15:49:42.387 に答える