고성능 스레드 안전 캐싱을 구현하려고합니다. 다음은 구현 한 코드입니다. 온 디맨드 컴퓨팅을 원하지 않습니다. cache.asMap()을 사용하여 값을 안전하게 검색 할 수 있습니까? 캐시가 softValues를 갖도록 설정 되었더라도? 여기고성능 스레드 안전 캐싱을 위해 Guava 사용
import java.io.IOException;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
public class MemoryCache {
private static MemoryCache instance;
private Cache<String, Object> cache;
private MemoryCache(int concurrencyLevel, int expiration, int size) throws IOException {
cache = CacheBuilder.newBuilder().concurrencyLevel(concurrencyLevel).maximumSize(size).softValues()
.expireAfterWrite(expiration, TimeUnit.SECONDS).build();
}
static public synchronized MemoryCache getInstance() throws IOException {
if (instance == null) {
instance = new MemoryCache(10000, 3600,1000000);
}
return instance;
}
public Object get(String key) {
ConcurrentMap<String,Object> map =cache.asMap();
return map.get(key);
}
public void put(String key, Object obj) {
cache.put(key, obj);
}
}
호기심에 따라 캐시에 동시에 액세스하는 10000 개의 스레드가 실제로 있습니까? 이후로는 동시성 수준으로 사용하는 가치가 있습니다. – pcalcao
아니요 해당 매개 변수를 삭제했습니다. 현재 기본 동시성 수준 즉 4를 사용하고 있습니다. 점을 지적 해 주셔서 감사합니다. – systemboot