7

我想使用 guava 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>在此方法中返回 a 而不必以key任何方式使用该值?

4

1 回答 1

19

缓存的想法是你通常会遇到这个问题:

Graph get(Key key) {
    Graph result = get( key );
    if( null == result ) {
        result = createNewGraph( key );
        put( key, result );
    }
    return result;
}

加上在多线程环境中使用此代码时常见的同步问题。

Guava 为你做样板;你只需要实施createNewGraph(). Java的工作方式,这意味着你必须实现一个接口。在这种情况下,接口是CacheLoader

如果您认为整个缓存有点像地图,那么CacheLoader当在地图中找不到键时,就会调用一个回调。加载器将获取密钥(因为它通常包含有用的信息来创建该密钥所期望的对象)并且它将返回get()应该在将来返回的值。

于 2013-10-31T12:31:50.200 回答