1

有没有办法不使用 Guava Cache 缓存某些特定元素?我仍然希望返回元素,但不缓存。

例如:

LoadingCache guavaCache;

public Element load(String key) {
  Element element = requestElement(key);

  if(element.isActive == false){
    guavaCache.dontCache(element);
  }

  return element;
}
4

2 回答 2

3

我为这个问题实现了一个解决方案:在返回元素后使其无效。这将在插入元素后立即从缓存中删除元素。

缓存配置:

public Element load(String key) {
  return requestElement(key);
}

然后:

element = guavaCache.get(key);
if(element.isActive == false){
  guavaCache.invalidate(key)
}

这似乎不是很干净,但它是由 Guava 在内部完成的。

于 2017-11-15T01:26:48.463 回答
1

一个简单的解决方案,避免将元素添加到缓存中并在以后使其无效,是从源请求元素(不使用缓存)并在元素符合条件时将其添加到缓存中。

element = cache.getIfPresent(key);

if(element == null){
  element = source.request(key);
  if(element != null && eligibleToCache(element)){
    cache.put(key, element)
  }
}

尽管使用它会丢失缓存的功能。此解决方案是避免在缓存中插入元素并在以后使其无效。

于 2018-04-27T21:15:22.947 回答