2017-09-02 11 views
0

Ehcacheを使用して、Webアプリケーション内で高価なサービス呼び出しの結果をキャッシュしています。Java Webアプリケーションでの永続キャッシュ?

JVMを再起動してもキャッシュを保持したい。

heapdiskの2層ehcacheを構成しました。残念ながら、PersistentCacheManager.close()が呼び出されると、Ehcacheはキャッシュをディスクに保存するだけです。

永続性を正しく機能させるにはどうすればよいですか?定期的にキャッシュを閉じて再オープンするはずですか?私はこれのためにehcache以外の何かを見ているべきですか?

+0

ディスクストアからロードできるキャッシュを作成することは、実際には非常に困難です。おそらく* Ehcache *は、キャッシュをメモリに格納するだけで十分だと判断しました。私は、あなたが必要とするものを見つけるために、より多くを見回す必要があるかもしれないと思います。フラットファイルではなく、データベースに裏打ちされたものを探してください。これは、基本的にオブジェクトを保存してリアルタイムで取得する必要があるためです。 (フラットファイルはスタートアップ/シャットダウンの保存のためのものです) – markspace

+0

アプリケーションはSQLite3と完全に似ています。 – MarsAtomic

答えて

0

Ehcacheは階層モデルを使用します。キャッシュに書き込まれるデータは、常にケースの最下位層ディスクに配置されます。その後、読み取りが行われると、頻繁にアクセスされる値がヒープ層に引き込まれ、より高速に取得されます。したがって、データは操作中にディスクに書き込まれ、ヒープだけのキャッシュスペースよりも大きなキャッシュスペースを提供します。

キャッシュの整合性とJVMの再起動後にデータを回復する機能を保証するには、PersistentCacheManager.close()を呼び出す必要があります。しかし、それはあなたのアプリケーションの人生の間に起こらなければならないというわけではありません。ちょうどJVMを殺すのではなく、適切なWebアプリケーションシャットダウンシーケンスが必要です。

0

WebアプリケーションのJVMの隣でTerracotta cluster deployment(オープンソースもあります)での使用をお勧めします。

その後、構成します

、Webアプリケーション、3つの階層上:ヒープ、offheapおよびクラスタ化

<cache alias="clustered-cache"> 
    <resources> 
    <heap unit="MB">10</heap> 
    <offheap unit="MB">512</offheap> 
    <clustered-dedicated unit="GB">2</clustered-dedicated> 
    </resources> 
</cache> 

Terracottaサーバの展開は次のようになり1アクティブ、1パッシブ - ので、あなたは、障害を持っている場合や、 1台のサーバーでのメンテナンスを前提にして、他のサーバーはすべてのクライアントにサービスを提供します。

オープンソースのクラスタ化された層を使用する利点は、オープンソースのディスク層と比較して、障害(Webアプリケーションコンテナの障害、テラコッタサーバの障害)が発生した場合でも、セットアップ。

関連する問題