CacheBuilder类通过Builder模式,提供获取Cache和LoadingCache实例的一种途径。有许多选项我可以对cache实例进行指定。第一个例子,如何指定cache entry在载入之后的失效时间:
LoadingCache<String,TradeAccount> tradeAccountCache =
CacheBuilder.newBuilder()
.expireAfterWrite(5L, TimeUnit.Minutes)
.maximumSize(5000L)
.removalListener(new TradeAccountRemovalListener())
.ticker(Ticker.systemTicker())
.build(new CacheLoader<String, TradeAccount>() {
@Override
public TradeAccount load(String key) throws Exception {
return tradeAccountService.getTradeAccountById(key);
}
});
public class TradeAccount {
private String id;
private String owner;
private double balance;
}
LoadingCache<String,Book> bookCache = CacheBuilder.newBuilder()
.expireAfterAccess(20L,TimeUnit.MINUTES)
.softValues()
.removalListener(new BookRemovalListener())
.build(new CacheLoader<String, Book>() {
@Override
public Book load(String key) throws Exception
{
return bookService.getBookByIsbn(key);
}
});
这个例子上,我们的做法就有点不同。
LoadingCache<String,TradeAccount> tradeAccountCache =
CacheBuilder.newBuilder()
.concurrencyLevel(10)
.refreshAfterWrite(5L,TimeUnit.SECONDS)
.ticker(Ticker.systemTicker())
.build(new CacheLoader<String,TradeAccount>() {
@Override
public TradeAccount load(String key) throws Exception {
return tradeAccountService.getTradeAccountById(key);
}
});