purge/clean 番石榴缓存中所有空值的最佳方法是什么?

What would be the best way to purge/clean all null values in a Guava cache?

我目前正在使用 Guava cache generated by Guava's cache builder,它具有删除所有值、按键删除一组值以及按键删除值的方法。不,我不能不存储空值,因为它们需要存储大约 5 分钟。

除了完全重新实现一个新的缓存之外,是否有更好的方法在 N 分钟后删除所有空值,我可以在其中设置 expireAfterWriteNanos 或类似的东西:

schedule at fixed rate(
   () -> {
      iterate through all keys to save which ones have null values
      cache.invalidate(iterable of all of those keys)
   },
   5 minutes
);

我不想使用这种方法,因为遍历所有键的成本很高

没有比您描述的更好的了,但我质疑这样一种假设,即遍历所有键必然很昂贵,尤其是如您描述的那样,在后台任务中进行。

当然,您可以让缓存的“值”存储您的当前值和它们的创建时间,然后让您的缓存查找检查空值是否不早于特定时间。