正确使用Guava CacheBuilder
Use Guava CacheBuilder correctly
有人可以向我解释如何正确使用 Guava CacheBuilder。
如果数据不可访问,getFromNetwork() 应该引发异常还是 return 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;
}
我觉得Javadoc for load
说的很清楚了:
Returns:
the value associated with key; must not be null
Throws:
Exception - if unable to load the result
如果数据不可访问,则无法加载结果,因此抛出异常。
Do I use the CacheBuilder as is it supposed to be used? I dont use guavaCache.put()? this is done automatically. right?
是的,这对我来说很好,尽管您只需要调用 get
或 getUnchecked
之一。你绝对不需要 put
.
有人可以向我解释如何正确使用 Guava CacheBuilder。
如果数据不可访问,getFromNetwork() 应该引发异常还是 return 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;
}
我觉得Javadoc for load
说的很清楚了:
Returns:
the value associated with key; must not be null
Throws:
Exception - if unable to load the result
如果数据不可访问,则无法加载结果,因此抛出异常。
Do I use the CacheBuilder as is it supposed to be used? I dont use guavaCache.put()? this is done automatically. right?
是的,这对我来说很好,尽管您只需要调用 get
或 getUnchecked
之一。你绝对不需要 put
.