有没有办法不使用Guava Cache缓存某些特定元素?我仍然希望返回元素,但不要缓存。
例如:
LoadingCache guavaCache;
public Element load(String key) {
Element element = requestElement(key);
if(element.isActive == false){
guavaCache.dontCache(element);
}
return element;
}
答案 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)
}
}
虽然您将使用此功能丢失缓存的功能。此解决方案是避免将元素插入缓存中,以后必须使其无效。