可以使用最大尺寸1的番石榴高速緩存嗎?番石榴高速緩存最大尺寸1
我在讀,有時甚至在達到最大尺寸之前可能會被驅逐。
但是,我只需要一個緩存條目。所以我想知道什麼值設置爲最大尺寸,這將是安全的,但不是過度。
可以使用最大尺寸1的番石榴高速緩存嗎?番石榴高速緩存最大尺寸1
我在讀,有時甚至在達到最大尺寸之前可能會被驅逐。
但是,我只需要一個緩存條目。所以我想知道什麼值設置爲最大尺寸,這將是安全的,但不是過度。
您應該可以使用Cache.cleanUp()
,如When Does Cleanup Happen?中所述,並測試最大尺寸是否滿足您的需求。
例如下面顯示了直到一個不同的項目被裝載到它的位置使用LoadingCache
與1最大規模不會驅逐現有的條目:
final LoadingCache<Character, Integer> loadingCache = CacheBuilder.newBuilder()
.maximumSize(1)
.build(new CacheLoader<Object, Integer>() {
private final AtomicInteger loadInvocationCount = new AtomicInteger();
@Override
public Integer load(Object key) throws Exception {
return loadInvocationCount.getAndIncrement();
}
});
assert loadingCache.size() == 0;
assert loadingCache.getUnchecked('a') == 0;
assert loadingCache.size() == 1;
loadingCache.cleanUp();
assert loadingCache.size() == 1;
assert loadingCache.getUnchecked('a') == 0;
assert loadingCache.size() == 1;
assert loadingCache.getUnchecked('b') == 1;
assert loadingCache.size() == 1;
loadingCache.cleanUp();
assert loadingCache.size() == 1;
assert loadingCache.getUnchecked('a') == 2;
assert loadingCache.size() == 1;
loadingCache.cleanUp();
assert loadingCache.size() == 1;
注意,這可能是特定的LoadingCache
正在修建這樣的類型您需要測試您計劃使用的任何配置。
謝謝,我使用'Suppliers.memoizeWithExpiration()'來代替,因爲基本上這是我正在尋找的功能 - 在給定的時間內緩存1個對象。當我發表原帖時,我並不知道「備忘錄」。 – ycomp
最有可能使用[Suppliers.memoize](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Suppliers.html#memoize(com.google.common。 base.Supplier))或者'AtomicReference'是單條緩存更好的匹配。 –
[緩存 - 在java中的一個對象的線程安全的緩存](https://stackoverflow.com/questions/3636244/thread-safe-cache-of-one-object-in-java) – ycomp