如何跳过/避免Guava Cache

时间:2017-11-14 01:14:46

标签: caching guava google-guava-cache

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

例如:

LoadingCache guavaCache;

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

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

  return element;
}

2 个答案:

答案 0 :(得分:2)

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

缓存配置:

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

然后:

Schema CreateTableSQL ( )   BAD
CREATE TABLE (
email_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
email VARCHAR(64) NOT NULL DEFAULT '',
subject VARCHAR(250) NOT NULL DEFAULT '', 
submitted DATETIME NOT NULL DEFAULT '1970-01-01 00:00:01',
metadata LONGTEXT NOT NULL,
body LONGTEXT NOT NULL,
PRIMARY KEY (email_id) )
ENGINE=MyISAM

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

答案 1 :(得分:1)

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

element = cache.getIfPresent(key);

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

虽然您将使用此功能丢失缓存的功能。此解决方案是避免将元素插入缓存中,以后必须使其无效。