1

有人可以解释一下如何正确使用 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;
}
4

1 回答 1

3

我认为Javadoc forload很清楚:

返回:
与键关联的值;不能为 null
抛出:
异常 - 如果无法加载结果

如果数据不可达,则无法加载结果,因此抛出异常。

我是否按照应该使用的方式使用 CacheBuilder?我不使用 guavaCache.put()?这是自动完成的。正确的?

是的,这对我来说看起来不错,尽管您只需要调用其中一个getor getUnchecked。你绝对不需要put

于 2015-12-09T23:56:50.083 回答