mem*_*und 6 java caching guava
我想使用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);
}
});
Run Code Online (Sandbox Code Playgroud)
问题:这个createExpensiveGraph(key)方法是什么?这是一个返回HashMap<Key, Value>映射的方法吗?我该怎么处理这个key价值?
或者我也可以List<String>在这种方法中返回一个不必以key任何方式使用该值的方法?
Aar*_*lla 19
缓存的想法是你通常有这个问题:
Graph get(Key key) {
Graph result = get( key );
if( null == result ) {
result = createNewGraph( key );
put( key, result );
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
加上在多线程环境中使用此代码时常见的同步问题.
番石榴为你做样板; 你只需要实施createNewGraph().Java的工作方式,这意味着您必须实现一个接口.在这种情况下,界面是CacheLoader.
如果您认为整个缓存有点像地图,那么CacheLoader只要在地图中找不到密钥就会调用回调.加载器将获取密钥(因为它通常包含创建此密钥所需的对象的有用信息),并且它将返回get()将来应返回的值.