2017-05-16 20 views
-1

谷歌提供了一個「loading cache」,其被描述爲以下內容:從鍵到值什麼是「LoadingCache」?

半持久映射。值由緩存自動加載,並存儲在緩存中,直到被逐出或手動無效。

不幸的是,上面的描述並不十分清楚。 「自動加載」是什麼意思?

我希望這意味着:「如果請求的密鑰不存在於緩存中,它會自動添加到它」。

這多少受到這種說法的支持(與get()函數):

「如果有必要返回與此高速緩存關聯的值,首先裝載的是 價值。」

但同樣,高速緩存的「加載」方面字「加載」解釋。的路要走,谷歌:

+1

它的確如你所想。但我想知道爲什麼這個問題存在。你爲什麼不先試試?如果您在Guava的GitHub項目或互聯網上找到大量的示例,這並不像設置它很複雜。你會親眼看到它正在做你認爲它正在做的事情。請注意,「載入」一詞明確用於[Wikipedia](https://en.wikipedia.org/wiki/Cache_(計算)),[Guava文檔](https://github.com/google/番石榴/維基/ CachesExplained)(不是Javadoc,真正的文檔)解釋這是進一步的細節。 –

+0

「LoadingCache」的第二個谷歌搜索結果鏈接到[Guava wiki頁面「CachesExplained」](https://github.com/google/guava/wiki/CachesExplained) - 請仔細閱讀並閱讀任何進一步的具體問題,如果您仍然不明白它的目的。 – Xaerxess

+0

@OlivierGrégoire:我不是一個java程序員。試一試對我來說不是微不足道的。此外,該wiki文章還不錯,但術語load在那裏提到了兩次,我可以在類似的上下文中輕鬆找到術語'put'(請參閱:https://developer.mozilla.org/en-US/docs/Web/API/Cache/put)。 – FuzzyAmi

回答

2

番石榴的wiki文檔有它的​​:(重點是我的)

一個LoadingCache是帶有附加CacheLoader內置了Cache。創建CacheLoader通常與實施方法V load(K key) throws Exception一樣簡單。因此,例如,您可以創建與下面的代碼LoadingCache

[...]

的正規途徑來查詢LoadingCache與方法get(K)這將返回已經緩存的值,或者使用緩存的CacheLoader自動將新值加載到緩存中。由於CacheLoader可能會拋出ExceptionLoadingCache.get(K)拋出ExecutionException。如果你定義了一個CacheLoader沒有聲明任何檢查的異常,那麼你可以使用getUnchecked(K)來執行緩存查找;但是,必須注意不要在CacheLoader聲明檢查異常的緩存上調用getUnchecked

這句話強調解釋了所有有解釋:一個值是從緩存或當get(K)被稱爲加載。


在評論你說你要更注重的是裝載。當你把東西放在緩存中,你。當你不把東西放入緩存中,但緩存會自動計算並放置它時,緩存會爲你加載

+0

感謝您確認我的問題!我仍然認爲用'原子X'來解釋'X緩存'並不是非常具有描述性,並留下了懷疑的餘地(因此也就是問題)。 – FuzzyAmi

+0

關於「自動」,請參閱Java的[「原子」定義](https://docs.oracle.com/javase/tutorial/essential/concurrency/atomicvars.html):它的代碼將被執行「作爲一個單一的動作「,這在多線程應用程序中很重要。 –

+0

謝謝。也許我應該更清楚:重點不在於原子性。它關於'加載'位。但現在很明顯。 – FuzzyAmi