我想使用guavas CacheBuilder
,但找不到任何明确的示例如何实现它。
文档说明以下代码:
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.maximumSize(1000)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
问题:这个createExpensiveGraph(key)
方法是什么?这是一个返回HashMap<Key, Value>
映射的方法吗?我如何处理key
值?
或者,我是否也可以在此方法中返回List<String>
,而不必以任何方式使用key
值?
答案 0 :(得分:18)
缓存的想法是你通常遇到这个问题:
Graph get(Key key) {
Graph result = get( key );
if( null == result ) {
result = createNewGraph( key );
put( key, result );
}
return result;
}
加上在多线程环境中使用此代码时遇到的常见同步问题。
番石榴为你做样板;你只需实施createNewGraph()
。 Java的工作方式,这意味着您必须实现一个接口。在这种情况下,界面为CacheLoader
。
如果您认为整个缓存有点像地图,则CacheLoader
是一个回调,无论何时在地图中找不到密钥,都会调用该回调。加载器将获取密钥(因为它通常包含创建此密钥所需的对象的有用信息),并且它将返回get()
将来应返回的值。