正确使用Guava CacheBuilder

时间:2015-12-09 23:44:14

标签: java guava google-guava-cache

有人可以解释一下如何正确使用Guava CacheBuilder。

如果数据无法访问,getFromNetwork()是否会引发异常或返回null?我应该提出执行异常并使用guavaCache.get()。我只是不确定文档对未经检查的异常意味着什么?

我是否按原样使用CacheBuilder? 我不使用guavaCache.put()?这是自动完成的。正确?

        guavaCache = CacheBuilder.newBuilder()
            .maximumSize(maxCapacity)
            .expireAfterWrite(1, TimeUnit.HOURS)
            .removalListener(new RemovalListener<Object, Object>() {
                @Override
                public void onRemoval(RemovalNotification<Object, Object> notification) {}
            })
            .build(
                    new CacheLoader<String, byte[]>() {
                        public byte[] load(String key) throws Exception {
                            return getFromNetwork(key);
                        }
                    });

private byte[] get(Object... params) {
    String url = paramsToUri(params).toString();

    byte[] data = null;
    data = guavaCache.get(url); //?
    data = guavaCache.getUnchecked(url); //?
    return data;
}

1 个答案:

答案 0 :(得分:3)

我认为Javadoc for load非常明确:

  

返回:
     与密钥相关的值;不得为空   抛出:
      例外 - 如果无法加载结果

如果无法访问数据,则无法加载结果,因此抛出异常。

  

我是否按原样使用CacheBuilder?我不使用guavaCache.put()?这是自动完成的。正确?

是的,这对我来说很好,但您只需要拨打getgetUnchecked之一。你绝对不需要put