单个对象
Suppliers
https://google.github.io/guava/releases/19.0/api/docs/com/google/common/base/Suppliers.html#memoizeWithExpiration(com.google.common.base.Supplier, long, java.util.concurrent.TimeUnit)
example:
http://stackoverflow.com/questions/7864637/what-is-the-best-way-to-cache-single-object-within-fixed-timeout
public class JdkVersionService {
@Inject
private JdkVersionWebService jdkVersionWebService;
// No need to check too often. Once a year will be good :)
private final Supplier<JdkVersion> latestJdkVersionCache
= Suppliers.memoizeWithExpiration(jdkVersionSupplier(), 365, TimeUnit.DAYS);
public JdkVersion getLatestJdkVersion() {
return latestJdkVersionCache.get();
}
private Supplier<JdkVersion> jdkVersionSupplier() {
return new Supplier<JdkVersion>() {
public JdkVersion get() {
return jdkVersionWebService.checkLatestJdkVersion();
}
};
}
}
多个对象
Class CacheBuilder<K,V>
https://google.github.io/guava/releases/16.0/api/docs/com/google/common/cache/CacheBuilder.html
example:
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.maximumSize(10000)
.expireAfterWrite(10, TimeUnit.MINUTES)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});