Guava Cache
Posted lshare
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Guava Cache相关的知识,希望对你有一定的参考价值。
Guava Cache 是做什么的?
内存缓存,类似于 ConcurrentMap,支持自动缓存、缓存回收和缓存移除回调。
两种加载方式
使用CacheLoader
当有默认的加载或计算方式使用该方式。示例如下:
LoadingCache<Key, Value> cache = CacheBuilder.newBuilder()
.maximumSize(1000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<Key, Value>()
public Value load(Key key) throws Exception
return createExpensiveValue(key);
);
//...
try
cache.get(key);
catch (ExecutionException e)
throw new OtherException(e.getCause());
使用 Callable
当没有默认加载运算,或者想要覆盖默认的加载运算,同时保留 “获取缓存 -- 如果没有 -- 则计算”(get-if-absent-compute)的原子语义时使用该方式。示例如下:
Cache<Key, Value> cache = CacheBuilder.newBuilder()
.expireAfterWrite(1,TimeUnit.MINUTES)
.removalListener(this)
.build();
//...
// 1. get
try
cache.get(key, new Callable<Value>()
@Override
public Value call() throws AnyException
return doThingsTheHardWay(key);
);
catch (ExecutionException e)
throw new OtherException(e.getCause());
// 2. getIfPresent
cache.getIfPresent(key);
参考
以上是关于Guava Cache的主要内容,如果未能解决你的问题,请参考以下文章
Java技术专题「Guava技术系列」Guava-Collections实战使用相关Guava不一般的集合框架
无法使用 guava-datatype 从 Spring 服务中使用 GWTP-Rest + jackson-guava 反序列化 guava 类型