阅读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 的同时实现它?