В моем приложении я строю объект Guava Cache методом CacheBuilder.newBuilder (), и теперь мне нужно динамически настроить некоторые параметры инициализации для него.
Так как я не нашел метода перестройки для кэша гуавы, я должен перестроить новый.
Мой вопрос:
Кто-нибудь научит меня how to release the old one
? Я не нахожу ни одного полезного метода. Я просто вызываю cache.invalidateAll () для старого, чтобы сделать недействительными все ключи. Is there any risk for OOM
?
Поскольку кэш может использоваться в многопоточности, необходимо ли объявлять кэш как volatile
?
мои коды, как показано ниже:
private volatile LoadingCache<Long, String> cache = null;
private volatile LoadingCache<Long, String> oldCache = null;
public void rebuildCache(int cacheSize, int expireSeconds) {
logger.info("rebuildCache start: cacheSize: {}, expireSeconds: {}", cacheSize, expireSeconds);
oldCache = cache;
cache = CacheBuilder.newBuilder()
.maximumSize(cacheSize)
.recordStats()
.expireAfterWrite(expireSeconds, TimeUnit.SECONDS)
.build(
new CacheLoader<Long, String>() {
@Override
public String load(Long id) {
// some codes here
}
}
);
if (oldCache != null) {
oldCache.invalidateAll();
}
logger.info("rebuildCache end");
}
public String getByCache(Long id) throws ExecutionException {
return cache.get(id);
}