Java 如何使用guava CacheBuilder?
我想使用guavasJava 如何使用guava CacheBuilder?,java,caching,guava,Java,Caching,Guava,我想使用guavasCacheBuilder,但找不到任何明确的示例来实现这一点 这些文件说明了以下代码: LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder() .maximumSize(1000) .build( new CacheLoader<Key, Graph>() { public Graph load(Key key)
CacheBuilder
,但找不到任何明确的示例来实现这一点
这些文件说明了以下代码:
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.maximumSize(1000)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
LoadingCache-graphs=CacheBuilder.newBuilder()
.最大尺寸(1000)
.建造(
新缓存加载程序(){
公共图加载(键)引发任何异常{
返回createExpensiveGraph(键);
}
});
问题:这是什么createExpensiveGraph(键)
方法?这是一个返回HashMap
映射的方法吗?我与键
值有什么关系
或者我也可以在此方法中返回一个
列表
,而不必以任何方式使用键
值?缓存的概念是,您通常会遇到以下问题:
Graph get(Key key) {
Graph result = get( key );
if( null == result ) {
result = createNewGraph( key );
put( key, result );
}
return result;
}
加上在多线程环境中使用此代码时通常会遇到的同步问题
番石榴为你做样板;您只需实现createNewGraph()
。按照Java的工作方式,这意味着您必须实现一个接口。在这种情况下,接口是CacheLoader
如果您认为整个缓存有点像一个映射,那么
CacheLoader
是一个回调,每当在映射中找不到键时就会调用它。加载程序将获取密钥(因为它通常包含创建该密钥所需对象的有用信息),并且它将返回get()
将来应该返回的值。请参阅CacheLoader和load方法的api,其中给出了使用该方法的明确含义?createExpensiveGraph不返回hashMap,而是返回Graph的对象。它是您试图缓存结果的任何函数。