Cache.asMap().get(“key”)
로 값이 null인지 먼저 검사하면 된다.
GuavaCacheTest.java에서 사용예를 볼 수 있다. 특히 Multiple Cache Loading 이 필요할 경우 getAll
살펴볼 것.
LoadingCache<Key,Value> loadingCache = CacheBuilder.newBuilder() .some settings .build(new CacheLoader<Key, Value>() { @Override public Value load(Key cacheKey) throws Exception { ... blah blarh.. return value; } }); // 아래와 같이 lambda로 처리 가능하다. CacheLoader.from(this::someMethod)
CacheLoader
구현시에 loadAll(Iterable<? extends Key> keys)
를 함께 구현하면, LoadingCache.getAll()
에 의해서 키값을 다중으로 가져오는 것에 대응할 수 있다. 이 경우 load
는 loadAll
을 호출해서 처리하도록 한다.loadAll
은 Key에 대한 모든 값을 리턴해야한다. 그렇지 않으면 오류가 발생한다. null 상황 캐시가 필요하면 Optional
을 사용한다.Cache
로 받아야한다. LoadingCache
불가.Cache<Key, Value> cache = CacheBuilder.newBuilder() .maximumSize(1000) .build(); // look Ma, no CacheLoader ... try { // If the key wasn't in the "easy to compute" group, we need to // do things the hard way. cache.get(key, new Callable<Value>() { @Override public Value call() throws AnyException { return doThingsTheHardWay(key); } }); } catch (ExecutionException e) { throw new OtherException(e.getCause()); }