【问题标题】:Use Guava CacheBuilder correctly正确使用 Guava CacheBuilder
【发布时间】:2015-12-09 23:44:14
【问题描述】:

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

【问题讨论】:

    标签: java guava google-guava-cache


    【解决方案1】:

    我觉得Javadoc for load很清楚:

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

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

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

    是的,这对我来说看起来不错,尽管您只需拨打getgetUnchecked 之一。你绝对不需要put

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 2016-05-28
      • 2014-03-26
      • 2011-11-08
      • 1970-01-01
      相关资源
      最近更新 更多