1

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);
             }
           });

実装したいのは、次の要件を満たす必要があります。

  1. 特定のキーのキャッシュは 10 分後に期限切れになるため、get(key) の次の呼び出しでは常にcreateExpensiveGraph(key)タイマーの更新とリセットが呼び出されます (expireAfterWrite既にこれを行っていると思います)。
  2. 予期しないエラーが原因で への次の呼び出しがcreateExpensiveGraph(key)失敗した場合、次の呼び出しが 10 分後に発生した場合でも、古い値を使用したいと思います。

1の場合はGuavaの性質だと思いますLoadingCacheが、2の場合は1を維持しながらどのように実装できますか?

4

0 に答える 0