我阅读了解释Guava Cache的文档:CachesExplained。我确实知道refreshAfterWrite和expireAfterWrite在做什么。但是,在解释refreshAfterWrite时,该文档还提到了这一点:

“因此,例如,您可以在同一缓存上同时指定refreshAfterWrite和expireAfterWrite,这样,只要条目有资格进行刷新,就不会盲目地重置条目的过期计时器,因此,如果在条目之后不对其进行查询可以刷新,并且可以过期。”

这是令我困惑的部分。以我的理解,如果您希望自动刷新 key ,则只需指定refreshAfterWrite。为什么在使用refreshAfterWrite时为什么还要使用expireAfterWrite?

最佳答案

在某些情况下,您希望缓存的条目具有相关性,因此您可以设置刷新持续时间(执行(和异步)操作可能会更短,而驱逐后的完整获取时间可能会更短,因此有所不同),但同时时间,如果缓存是有界的,则需要逐出条目,这就是expireAfterWrite的目的。通过将它们都设置,您将确保某个条目在一定时间后被驱逐,即使刷新了该条目也是如此。

还要注意,两者的操作方式不同:

10-06 10:37