【发布时间】:2014-05-01 19:15:10
【问题描述】:
我有一个带有CacheLoader 的番石榴缓存。我在线程中跟踪了一个外部条件,如果发生这种情况,我想异步地 refresh() 所有条目。出于这个原因,我不使用invalidateAll(),因为下一个get() 必须等待加载成功。
相反,我遍历缓存中包含的键和 refresh(k) 所有键,因为我找不到 refreshAll() 方法。这是代码(但与问题无关):
Set<ResourceLoaderKey> keys = resourceLoaderCache.asMap().keySet();
for(ResourceLoaderKey k : keys)
{
resourceLoaderCache.refresh(k);
}
我现在的问题是,CacheLoader 中的reload() 可能会检测到资源实际上不再可用。目前reload() 会引发适用于get() 情况的ResourceNotFound 异常。但它不适用于refresh() 的情况,因为只要reload() 失败,就会提供旧值。
我现在可以在加载/重新加载方法中捕获未找到的异常并以某种方式使条目无效,但我想知道是否有官方方法可以做到这一点(返回 null 或 null 未来被记录为警告并被忽略)?能够删除键/缺失值而不是保留占位符对象会很好。
【问题讨论】:
-
这里有类似的问题,我目前的解决方案很丑,希望有一种支持的方式来做到这一点