gpt4 book ai didi

java - 使 Guava CacheLoader 中的刷新条目无效

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:42 25 4
gpt4 key购买 nike

我有一个带有 CacheLoader 的 Guava 缓存。我在线程中跟踪了一个外部条件,如果发生这种情况,我想异步 refresh() 所有条目。出于这个原因,我没有使用 invalidateAll(),因为下一个 get() 必须等待加载成功。

相反,我遍历了缓存中包含的键并 refresh(k) 所有这些键,因为我找不到 refreshAll() 方法。这是代码(但与问题无关):

    Set<ResourceLoaderKey> keys = resourceLoaderCache.asMap().keySet();
for(ResourceLoaderKey k : keys)
{
resourceLoaderCache.refresh(k);
}

我现在的问题是,CacheLoader 中的 reload() 可能会检测到资源实际上不再可用。当前,reload() 抛出 ResourceNotFound 异常,该异常适用于 get() 情况。但它不适用于 refresh() 情况,因为只要 reload() 失败,旧值就会被提供。

我现在可以在加载/重新加载方法中捕获未找到的异常并以某种方式使条目无效,但我想知道是否有官方方法可以做到这一点(返回 null 或 null future 被记录为警告并被忽略)?能够删除键/缺失值而不是保留占位符对象会很好。

最佳答案

guava r17 目前不支持执行此操作的方法。

您是否尝试过获取所有 key ,然后使所有 key 无效,然后尝试获取您保存的所有 key ?

Set<ResourceLoaderKey> keys = resourceLoaderCache.asMap().keySet();
resourceLoaderCache.invalidateAll(keys);
for(ResourceLoaderKey k : keys) {
resourceLoaderCache.get(k); //or getUnchecked() whichever you prefer
}

这应该确保没有陈旧的值留在缓存中,并重新缓存所有存在的值。

(我的问题略有不同,我不得不改变我的假设来解决我的问题)

关于java - 使 Guava CacheLoader 中的刷新条目无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22609275/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com