有没有办法不使用 Guava Cache 缓存某些特定元素?我仍然希望返回元素,但不缓存。
例如:
LoadingCache guavaCache;
public Element load(String key) {
Element element = requestElement(key);
if(element.isActive == false){
guavaCache.dontCache(element);
}
return element;
}
有没有办法不使用 Guava Cache 缓存某些特定元素?我仍然希望返回元素,但不缓存。
例如:
LoadingCache guavaCache;
public Element load(String key) {
Element element = requestElement(key);
if(element.isActive == false){
guavaCache.dontCache(element);
}
return element;
}
我为这个问题实现了一个解决方案:在返回元素后使其无效。这将在插入元素后立即从缓存中删除元素。
缓存配置:
public Element load(String key) {
return requestElement(key);
}
然后:
element = guavaCache.get(key);
if(element.isActive == false){
guavaCache.invalidate(key)
}
这似乎不是很干净,但它是由 Guava 在内部完成的。
一个简单的解决方案,避免将元素添加到缓存中并在以后使其无效,是从源请求元素(不使用缓存)并在元素符合条件时将其添加到缓存中。
element = cache.getIfPresent(key);
if(element == null){
element = source.request(key);
if(element != null && eligibleToCache(element)){
cache.put(key, element)
}
}
尽管使用它会丢失缓存的功能。此解决方案是避免在缓存中插入元素并在以后使其无效。