最近、TerracottaでEHCacheを使用してアプリケーションデータの分散データキャッシュを実行し始めました。どんなクライアントノードもヒープのために約2GBを持っているのに対して、サーバノードは8GBを持っているとしましょう。 1日あたり約1.5GBのデータを生成します。Terracottaを使用するEHCacheは、分散ヒープからの退去をどのように処理しますか?
通常、特定のクライアントは特定の日のデータセット(約1.5GB)を使用しますが、サーバーは明らかにそのすべてを保持する必要があります。
有効期限を切る方法は、ヒープが大きくなったときのLRUベースです。したがって、特定のL1クライアントサイドキャッシュが大きすぎると(たとえば、day1からday2に切り替えると)、L1からすべてのday1データを削除すると思います。 6番目のデータセットを取得するときにL2が大きすぎると、最も古いデータセットが完全に期限切れになります。私はtime-to-liveやtime-to-idle値については何の意見も持っていないので、未設定のままにしておきます。
見て数日後、私はこれが私が期待しているように動作しているとは思わない。例えば、私はL2の最大要素数が4のテストを実行しました。これには4つの要素がありました。それから私は第五の要素を置くように行きました。 Cache.put()は例外なく返されましたが、同じキーを持つCache.get()の直後にnullが返されました。
私の質問は、どうすればEHCache + Terracottaに私が望む、あるいは少なくとも何かをすることができますか?