guava學習筆記-本地快取工具
阿新 • • 發佈:2019-02-04
本地快取工具
我們經常使用ConcurrentHashMap快取資料,如果資料key存在則直接返回,否則計算後儲存再返回。guava提供了功能更強大的快取工具。使用時不用自己put,get的時候會自動快取起來,前提是你必須實現一個load資料的方法。
用CacheLoader構建:
@Test
public void testCacheWithLoader() throws ExecutionException {
LoadingCache<String, Integer> cache = CacheBuilder.newBuilder()
. maximumSize(1000) //最大快取資料量
.expireAfterAccess(10, TimeUnit.MINUTES) //過期清除
.build(
new CacheLoader<String, Integer>() { //快取規則
public Integer load(String key) {
return getObjectData(key);
}
});
String k1 = "aaa";
ConcurrentHashMap
System.out.println(k1 + " value is: " + cache.get(k1));
System.out.println(k1 + " value is: " + cache.get(k1));
Assert.assertEquals(cache.get(k1), cache.get(k1));
}
用Callable構建,允許你在get的時候做自定義處理。
@Test
public void testCacheWithCallable () {
//這裡不需要構建CacheLoader
Cache<String, Integer> cache = CacheBuilder.newBuilder().initialCapacity(1000).build();
String key = "a";
final Integer value = 1;
try {
Integer expectValue = cache.get(key, new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return value;
}
});
assertEquals(expectValue, value);
} catch (ExecutionException e) {
e.printStackTrace();
}
}