如何使用番石榴CacheBuilder?

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()将来应返回的值.