https://github.com/google/guava/wiki/CachesExplainedを読んだ後、Google Guavaのキャッシュは素晴らしいです
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
実装したいのは、次の要件を満たす必要があります。
- 特定のキーのキャッシュは 10 分後に期限切れになるため、get(key) の次の呼び出しでは常に
createExpensiveGraph(key)タイマーの更新とリセットが呼び出されます (expireAfterWrite既にこれを行っていると思います)。 - 予期しないエラーが原因で への次の呼び出しが
createExpensiveGraph(key)失敗した場合、次の呼び出しが 10 分後に発生した場合でも、古い値を使用したいと思います。
1の場合はGuavaの性質だと思いますLoadingCacheが、2の場合は1を維持しながらどのように実装できますか?