guava 학습 노트-로 컬 캐 시 도구
4069 단어 자바 상용 패키지
저 희 는 Concurrent HashMap 캐 시 데 이 터 를 자주 사용 합 니 다.데이터 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 cache = CacheBuilder.newBuilder().initialCapacity(1000).build();
String key = "a";
final Integer value = 1;
try {
Integer expectValue = cache.get(key, new Callable() {
@Override
public Integer call() throws Exception {
return value;
}
});
assertEquals(expectValue, value);
} catch (ExecutionException e) {
e.printStackTrace();
}
}