2012-02-11 4 views
3

Ehcacheでキャッシュをいつ再利用すればよいですか?また、いつ新しいキャッシュを作成する必要がありますか?新しいキャッシュ名はいつ使用しますか?

例1:

Iは、以下の方法があります指定された文字列(例えば "ローバ")について

public Dog getBestDog(String name) { 
    //Find the best dog with the provided name 
} 

public Dog getBestBrownDog(String name) { 
    //Find the best brown dog with the provided name 
} 

を、これらの2つの方法は、異なる犬オブジェクトを返すことができます。

@Cacheable(cacheName = "dogs")の両方に注釈を付ける必要がありますか、またはそれらを2つの異なるキャッシュ "bestDogs"と "bestBrownDogs"に入れる必要がありますか?

例2:私は、次のメソッドを持っている

public Dog getBestDogByName(String name) { 
    //Find the best dog with the provided name 
} 

public Dog getBestDogByColour(String colour) { 
    //Find the best dog with the provided colour 
} 

名 "ローバー" と色 "犬色は" 同じ犬を返すことができます。

@Cacheable(cacheName = "dogs")の両方に注釈を付ける必要がありますか、または2つの異なるキャッシュ 'dogsByName'と 'dogsByColour'にそれらを挿入する必要がありますか?

答えて

3

同じキーで異なる結果が生じるシナリオがある場合は、おそらく別のキャッシュが必要になることがあります。

例1:

getBestDog(name) - '最高の犬のキャッシュからキー

getBestBrownDog(name)として名を使用 - '最高ブラウン犬のキャッシュからのキーとして名前を使用

例2:

getBestDogByName(name) - 例1として、「最高の犬のキャッシュからのキーとして名前を使用するのと同じ

getBestDogByColour(colour) - カラーを「ベストドッグ・バイ・カラー」キャッシュのキーとして使用する

3つのキャッシュ、「ベスト・ドッグ」、「ベスト・ブラウン・ドッグ」、色 '

理論的には、あなたは「ベスト・ドッグス」と「ベスト・ドッグ・バイ・カラー」をマージすることができますが、「赤い」と呼ばれる犬がいるかもしれません。エッジケースの場合。

3

異なるキャッシュを使用すると動作します。また、単に以下のようなものでSPELを使用することによって異なるキーでそれらを設定し、同じキャッシュを使用することができます。それは異なるとの両方の方法で返された場合

@Cacheable(cacheName = "dogs", key = "'name.'+#name") 
public Dog getBestDogByName(String name) { 
    //Find the best dog with the provided name 
} 

@Cacheable(cacheName = "dogs", key = "'colour.'+#colour") 
public Dog getBestDogByColour(String colour) { 
    //Find the best dog with the provided colour 
} 
+0

これは、オブジェクトのコピーを1つだけ保存するように巧妙な何でもしますキー? –

+0

ehcacheの中でそれを設定する方法がない限り、それはできません。 – aweigold

関連する問題