Ich versuche, einen Cache mit Guava Cache-Bibliothek zu erstellen. Eine meiner Hauptanforderungen ist, dass ich den Cache-Ablauf nach der CacheLoader.load (..) -Funktion setzen möchte, anstatt der meisten Beispiele, die ich im Web gesehen habe, wie die unten stehende.Guava-Cache: Wie setze ich den Ablauf auf 'CacheLoader.load()' statt während CacheBuilder.newBuilder()?
LoadingCache<String, MyClass> myCache =
CacheBuilder.newBuilder().maximumSize(MAX_SIZE).expireAfterWrite(10, TimeUnit.Minutes).build(cacheLoader);
Der Grund dafür ist, dass das Objekt aus der Datenbank durch die CacheLoader.load abgerufen (...) Funktion, um die Verfallsdaten enthält. Ich möchte diese Information anstelle eines "zufälligen" statischen Wertes verwenden.
Ich möchte so etwas.
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;
}
};
ODER Gibt es eine bessere Option als Guava-Cache für diesen Zweck?
Nein, es gibt keine Möglichkeit, pro-Eintrag Ablaufzeiten mit Guava Cache einzustellen. Eine Diskussion finden Sie unter https://github.com/google/guava/issues/1203. –
Danke @LouisWasserman. –
Mögliches Duplikat von [Google Guava Cache - Ändern Sie die Räumungs-Zeitüberschreitungswerte während der Laufzeit] (http://stackoverflow.com/questions/26843814/google-guava-cache-change-the-eviction-timeout-values-during-run) (Zeit) – rkosegi