如何使用番石榴CacheBuilder?

时间:2013-10-31 11:11:24

标签: 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);
             }
           });

问题:这个createExpensiveGraph(key)方法是什么?这是一个返回HashMap<Key, Value>映射的方法吗?我如何处理key值?

或者,我是否也可以在此方法中返回List<String>,而不必以任何方式使用key值?

1 个答案:

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