高性能スレッドセーフキャッシュを実装しようとしています。ここに私が実装したコードがあります。私はオンデマンドコンピューティングを望んでいません。 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