0

次のスプリングキャッシュ構成があります:

spring.cache.guava.spec: expireAfterWrite=1s

それから私はそれをテストしています:

@Test
public void test_not_work() {
  callCachedMethod(..);
  sleep(2s);
  callCachedMethod(..);

  expect("real method called TWO times"); 
  // because cache should be expired after 1s
  // It DOESN'T work, real method only called once
}

@Test
public void test_works() {
  callCachedMethod(..);
  sleep(2s);
  callCachedMethod(..);
  sleep(2s);
  callCachedMethod(..);

  expect("real method called THREE times"); 
  // because cache should be expired after 1s
  // IT WORKS!!
}

誰かがそれを説明できますか?

4

1 に答える 1

1

これは、タイムアウト値が期限切れになったときに、Guava が値の自動的な削除を保証しないためです。

ここのドキュメントに従って:

CacheBuilder で構築されたキャッシュは、クリーンアップを実行せず、値を「自動的に」または値の有効期限が切れた直後に削除したり、そのようなものを削除したりしません。代わりに、書き込み操作中、または書き込みがまれな場合は不定期の読み取り操作中に、少量のメンテナンスを実行します。

于 2016-09-25T23:59:01.140 に答える