web-dev-qa-db-ja.com

リストを返すメソッドに配置された場合、Springの@Cacheableは何をしますか?

私は上記の質問に対する簡単な答えをオンラインで探しましたが、見つかりませんでした。私は次のような方法を持っています:

@Cacheable(cacheNames = "objects")
public List<Object> get() { .. }

Spring Framework4.2.1でEhCache2.10.0を使用していますが、このメソッドの出力は次のとおりです。

Adding cacheable method 'get' with attribute: [CacheableOperation[public Java.util.List com.example.DAO.get()] caches=[objects] | key='' ...

また(後のロギングで)

Computed cache key 'SimpleKey []' for operation ...

この状況で行う@Cacheableアノテーション想定は何ですか? (他の場所で示唆されているように)hashCodeによってキー設定されたキャッシュに各オブジェクトを配置しますか?または、リスト全体をそのままキャッシュにリストベースのhashCodeの下に配置しますか?

13
ben3000

SpringDocはこれについて言及しています。

キャッシュは基本的にKey-Valueストアであるため、キャッシュされたメソッドを呼び出すたびに、キャッシュアクセスに適したキーに変換する必要があります。すぐに使用できるキャッシング抽象化では、次のアルゴリズムに基づく単純なKeyGeneratorが使用されます。

  • パラメータが指定されていない場合は、_SimpleKey.EMPTY_を返します。

  • パラメータが1つだけ指定されている場合は、そのインスタンスを返します

  • 複数のパラメーターが指定されている場合は、すべてのパラメーターのハッシュから計算されたキーを返します。

https://docs.spring.io/spring/docs/5.0.8.RELEASE/spring-framework-reference/integration.html#cache

@Cacheable(cacheNames = "objects")で注釈を付けるときは、キャッシュを識別できるキャッシュ名を付けます。メソッドには引数がないため、「オブジェクト」としてのcacheNameの場合、戻りオブジェクト(この場合は_List<Object>_)が既にキャッシュされています。また、メソッドが呼び出されるたびに、cacheNameオブジェクトとキー値が「0」のキャッシュをチェックします。以前にキャッシュされた戻りオブジェクトがすでにある場合は、そのオブジェクトを返します。

更新:Spring 4+のパラメーターなしの_SimpleKey.EMPTY_キー付き

9
Karthik R