代码之家  ›  专栏  ›  技术社区  ›  Z.SP

Guava LoadingCache:为什么同时使用refreshAfterWrite和expireAfterWrite

  •  11
  • Z.SP  · 技术社区  · 7 年前

    我阅读了这篇解释番石榴缓存的文档: CachesExplained

    " 因此,例如,您可以在同一缓存上同时指定refreshAfterWrite和expireAfterWrite,这样每当条目符合刷新条件时,条目上的过期计时器不会盲目重置,因此如果条目符合刷新条件后未被查询,则允许其过期。

    这是让我困惑的部分。根据我的理解,如果希望自动刷新键,只需要指定refreshAfterWrite。为什么我们甚至想在使用ever-refreshAfterWrite时使用expireAfterWrite?

    1 回复  |  直到 7 年前
        1
  •  17
  •   Shmulik Klein    7 年前

    在某些情况下,您希望缓存的条目具有相关性,因此您可以设置刷新持续时间(执行刷新持续时间可能较短(并且是异步的),而不是逐出后的完全获取,因此会有所不同),但同时,如果缓存有界,您将希望逐出条目,这就是 expireAfterWrite

    刷新与驱逐并不完全相同。如LoadingCache中所述。刷新(K),刷新一个键会为该键加载一个新值,可能是异步的。刷新键时仍会返回旧值(如果有),这与逐出不同,逐出迫使检索等待,直到重新加载值。