1

Spring 3.1で@Cacheableを使用しています。Cacheable の値とキーのマッピング パラメータについて少し混乱しました。これが私がやっていることです:

@Cacheable(value = "message", key = "#zoneMastNo")
public List<Option> getAreaNameOptionList(String local, Long zoneMastNo) {
//..code to fetch data form database..
return list;
}

@Cacheable(value = "message", key = "#areaMastNo")
public List<Option> getLocalityNameOptionList(String local, Long areaMastNo) {
//..code to fetch data form database..
return list;
}

ここで何が起こっているのか、2 番目のメソッドは最初のメソッドの選択された値に依存しますが、問題は、zoneMastNo = 1 と areaMastNo = 1を渡すと、2 番目のメソッドが最初のメソッドの結果を返すと仮定します。実際、私は多くのサービスを持っているため、特定のユースケースでキャッシュ可能な共通の値を使用しようとしています。今私の質問は次のとおりです。

  • この問題を解決するにはどうすればよいですか?
  • すべてのサービスにキャッシュ可能を使用するのは良い考えですか?
  • 指定された時間が経過すると、 @CacheEvict を使用せずにキャッシュがメモリから完全に削除されますか?
4

2 に答える 2

2
  • この問題を解決するにはどうすればよいですか?

つまりzoneMastNo、for =areaMastNoはfor =と同じではありません。これは、 2 つのキャッシュが必要であることを意味します。ただし、明示的に という名前のキャッシュを 1 つだけ使用しています。29.3.1 @Cacheable アノテーションの引用:List<Option>zoneMastNo1List<Option>areaMastNo1message

@Cacheable("books")
public Book findBook(ISBN isbn) {...}

上記のスニペットでは、メソッド findBook が という名前のキャッシュに関連付けられていbooksます。

したがって、私の理解が正しければ、基本的に 2 つの異なるキャッシュを使用する必要があります。

@Cacheable(value = "byZone", key = "#zoneMastNo")
public List<Option> getAreaNameOptionList(String local, Long zoneMastNo)
//...
@Cacheable(value = "byArea", key = "#areaMastNo")
public List<Option> getLocalityNameOptionList(String local, Long areaMastNo)

localまた、これらのメソッドの結果がパラメーターによって異なることはありませんか? そうでない場合、それは何に使用されますか?


すべてのサービスにキャッシュ可能を使用するのは良い考えですか?

いいえ、次の理由によります。

  • 一部のメソッドは十分に高速です
  • ...そしてキャッシングはそれ自体でいくらかのオーバーヘッドをもたらしました
  • 一部のサービスは他のサービスを呼び出します。階層のすべてのレベルでキャッシュが必要ですか?
  • キャッシングには大量のメモリが必要です
  • キャッシュの無効化は難しい

指定された時間が経過すると、 @CacheEvict を使用せずにキャッシュがメモリから完全に削除されますか?

それはキャッシュの実装に完全に依存します。しかし、すべての正常な実装には、EhCache などのオプションがあります。

于 2013-01-11T18:58:58.070 に答える
0

質問 3: キャッシュの有効期限の構成によって異なります。ehcache を使用する場合は、ehcache.xml の設定を変更します。

于 2013-01-11T06:57:02.500 に答える