gpt4 book ai didi

caching - 使用Guava进行高性能的线程安全缓存

转载 作者:行者123 更新时间:2023-12-03 13:48:09 26 4
gpt4 key购买 nike

我正在尝试实现高性能的线程安全缓存。这是我实现的代码。我不需要任何按需计算。我可以使用cache.asMap()并安全地检索值吗?即使将缓存设置为具有softValues?

  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);
}
}

最佳答案

Guava 的贡献者在这里:

是的,虽然我不确定将缓存包装在另一个对象中的意义是什么,但这看起来还不错。 (此外,Cache.getIfPresent(key)完全等效于Cache.asMap().get(key)。)

关于caching - 使用Guava进行高性能的线程安全缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11124856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com