我讀了解釋Guava Cache的文檔:CachesExplained。我明白了refreshAfterWrite和expireAfterWrite在做什麼。然而,在解釋refreshAfterWrite,該文件還提到了這一點:Guava LoadingCache:爲什麼使用refreshAfterWrite和expireAfterWrite在一起
「因此,舉例來說,你可以同時指定refreshAfterWrite和expireAfterWrite在同一高速緩存,使一個條目的過期計時器不能盲目復位每當條目有資格進行刷新,因此如果條目在具有刷新資格後沒有被查詢,則允許其過期。「
這是混淆了我的部分。據我的理解,如果你想要一個鍵自動刷新,你只需要指定refreshAfterWrite。爲什麼我們甚至想在使用refreshAfterWrite時使用expireAfterWrite?
有意義。但我也有這個問題:如果我只是使用expireAfterWrite(),它應該也是對的? expireAfterWrite()會清除舊條目。每當我調用get()時,無論是緩存加載的新值還是緩存中的值,取決於值是否過期,都會返回給我。解釋refreshAfterWrite()的文件說這**只在查詢條目時實際啓動刷新**。那麼refreshAfterWrite()有什麼意義呢?你能舉個例子嗎? –
刷新操作可能會更輕(異步),然後在驅逐後進行完整的讀取操作。我已將此註釋添加到答案主體。 –
刷新將重置到期的寫入時間戳。意圖是有些條目可能非常熱門,並且當到期時,當呼叫者阻塞負載時,用戶可見的延遲。刷新允許重新加載活動條目而不產生此成本。如果不活躍,那麼到期將啓動並逐出。 –