Yüksek performanslı, diş güvenli bir önbelleğe almayı denemeye çalışıyorum. İşte uygulamış olduğum kod. İsteğe bağlı bilgisayar istemiyorum. Cache.asMap() öğesini kullanabilir ve değeri güvenli bir şekilde alabilir miyim? Önbellek softValues'a sahip olsa bile mi? BuradaYüksek performanslı iplik güvenli önbellekleme için Guava'yı kullanma
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);
}
}
Bir merak olarak, eş zamanlı olarak önbellekinize erişen 10000 iş parçacığına sahip olmayı gerçekten bekliyor musunuz? Bunun için eşzamanlılık düzeyi olarak kullandığınız değer olduğunu soruyorum. – pcalcao
Hayır Bu parametreyi kaldırdım. Şimdi varsayılan eşzamanlılık düzeyini kullanıyorum. – systemboot