Я пытаюсь создать кеш с использованием библиотеки кэша guava. Одним из моих основных требований является то, что я хочу установить истечение кеша после функции CacheLoader.load (..) вместо того, что есть в большинстве примеров, с которыми я столкнулся в Интернете, например, ниже.Guava cache: как установить срок действия на 'CacheLoader.load()', а не во время CacheBuilder.newBuilder()?
LoadingCache<String, MyClass> myCache =
CacheBuilder.newBuilder().maximumSize(MAX_SIZE).expireAfterWrite(10, TimeUnit.Minutes).build(cacheLoader);
Причина этого заключается в том, что объект извлекается из базы данных с помощью функции CacheLoader.load (...) содержит данные истечения срока действия. Поэтому я хочу использовать эту информацию вместо некоторого «случайного» статического значения.
Я хочу что-то вроде этого.
LoadingCache<String, MyClass> myCache =
CacheBuilder.newBuilder().maximumSize(MAX_SIZE).build(cacheLoader);
...
CacheLoader meCacheLoder = new CacheLoader<String MyClass>(){
@Override
public MyClass load(String key) throws Exception {
// Retrieve the MyClass object from database using 'key'
MyClass myObj = getMyObjectFromDb(key);
int expiry = myObj.getExpiry();
// Now somehow set this 'expiry' value with the cache
????
return myObj;
}
};
ИЛИ Есть ли лучший вариант, чем доступный кэш Гуава для этой цели?
Нет, нет никакого способа, чтобы установить для каждого входа сроком действия с кэшем гуавы в. См. Https://github.com/google/guava/issues/1203 для обсуждения. –
Спасибо @LouisWasserman. –
Возможный дубликат [Google Guava Cache - изменение значений тайм-аута выключения во время выполнения] (http://stackoverflow.com/questions/26843814/google-guava-cache-change-the-eviction-timeout-values-during-run -time) – rkosegi