2012-07-13 126 views
10

鑑於使用下面的代碼創建的Guava緩存是否存在最大緩存大小(如果沒有設置)?Google Guava Cache的默認最大大小是多少?

LoadingCache<String, String> loadingCache = CacheBuilder.newBuilder().build(new CacheLoader<String, String>() { 
    @Override 
    public String load(String key) throws Exception 
    { 
     return key.toUpperCase(); 
    } 
}); 

在我的情況下,我真的想要一個沒有大小上限的緩存。我正在使用緩存存儲登錄用戶的權限,並會在用戶註銷或會話過期時從緩存中刪除項目。

回答

22

默認的緩存是無限的:作爲javadoc for CacheBuilder解釋

這些功能都是可選的

通過由CacheBuilder創建不會執行任何類型的默認緩存實例驅逐。

+0

非常感謝這個鏈接,我剛剛發現了關於番石榴昨天和它的很多打開標籤在我的瀏覽器嘗試gork它。 – ams 2012-07-13 18:12:54

+0

他們是否刪除了有關默認'maximumSize'值的部分?我無法在較新的javadoc中找到它的任何提及,例如http://google.github.io/guava/releases/23.6-jre/api/docs/com/google/common/cache/CacheBuilder.html – Henrik 2018-01-31 13:34:10

+0

@Henrik從來沒有一個關於默認'maximumSize'值的部分:as由「這些功能全部是可選的」隱含,更明確地說「由CacheBuilder創建的默認緩存實例不會執行任何類型的驅逐」,因此沒有默認值,因此不會驅逐。 – 2018-02-09 10:23:03

3

簡單的答案是沒有限制,如果你的意思是「默認」是CacheBuilder.maximumSize()永遠不會被調用。

我不認爲你的應用程序需要基於尺寸的驅逐戰略。當用戶會話過期時,將其從緩存中刪除(Cache.invalidate(key))。

和字符串大寫不需要緩存,直接調用大寫比緩存更容易和有效。

相關問題