2009-07-27 2 views
6

私はJava EEアプリケーションをやっています。私は自分のオブジェクトにキャッシュが必要であると結論づけました。キャッシュインプリメンテーションを選ぶか、独自のロールを実行しますか?

私の現在の要件は、何らかの種類のキーバリューストレージよりもはるかに複雑ではなく、おそらくツリーを処理できるものです。 1つまたは複数のマップを含むシンプルなカスタム静的/シングルトンクラスを作成することが魅力的です。しかし、これほど多かれ少なかれ(Memcachedが思い浮かぶ)いくつかの実装があるので、私は自分の実装ではなく、Memcachedを使うことにいくつかの付加価値があるのだろうと思い始めました。

私は自分自身の静的データを作成することができますが、なぜ既製のキャッシュを取り上げるべきですか?およびその逆;既製のキャッシュを取り出すことができるときに、なぜ静的なクラスを書くべきですか?

答えて

6

複雑なオブジェクト・グラフの多くの場合のために、私はワンライナーで良い十分な性能を持っていた

new MapMaker().weakKeys().makeMap(); 

複雑なオブジェクトのキャッシュとして使用することができてこれは、Google collectionsを使用してマップを作成します。

キーが弱く、最終的に範囲外になるため、メモリの問題が発生する可能性は低いです。

私は単純なケースで言えば、分散キャッシュの「認知負荷」を気にしないでください。シリアライゼーションの問題、レイテンシなど。あなたはそれらを扱いたくありません。

+0

このMapMakerは私にとって新しいものです。私はそれを見なければならない。ヒントをありがとう! –

9

オープンソースと商用の両方のキャッシュ実装が多数あります。オブジェクトの退去、退去ポリシー、永続性、メモリ管理など、正しいキャッシュ時間を書くことには多くの問題があります。なぜなら私は自分のものを始めることはないでしょう(なぜホイールを再構築するのですか?)

以下の実装の1つを見てみましょう:

は「なぜ私は既製 キャッシュを拾うことができたときに 、静的クラスを作成する必要がありますか?」http://java-source.net/open-source/cache-solutions

+0

したがって、私が一度にキャッシュに入れたいすべてのデータに適合する1つのVMアプリケーションがあるとすれば、準備が整った実装には利点が追加されていると思いますか?当然のことながら、VMが増えたり、一度にすべてのデータをキャッシュに収めることができない場合、再構築しない理由があります。 –

+2

多くのことがそうであるように、既存のキャッシュライブラリの実装者が、あなたが遭遇する多くの問題を考えたように思えます。キャッシュのコーディングに問題が発生したら、それらと少なくとも1つの潜在的な解決策を容易に認識できるように、それぞれの説明を少なくとも読んでおくべきでしょう。 –

3

でより多くを参照してください。

サードパーティの依存関係をプロジェクトに含める必要がなく、キャッシュの書き方を学ぶ良い方法はありません。

関連する問題