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