दो चीजें जो मुझे वास्तव में गुवा 11 के कैशलोडर (धन्यवाद, Google!) के बारे में पसंद है, सभी लोड हैं(), जो मुझे एक साथ कई कुंजी लोड करने की अनुमति देता है, और पुनः लोड(), जो मुझे "अबाध" होने पर एक कुंजी को असीमित रूप से फिर से लोड करने की अनुमति देता है लेकिन पुराना मान मौजूद है। मैं उत्सुक हूं कि वे एक साथ कैसे खेलते हैं, क्योंकि पुनः लोड() एक एकल कुंजी पर चल रहा है।Google गुवा का कैशलोडर लोडअल() बनाम रीलोड() सेमेन्टिक्स
Concretely, CachesExplained से उदाहरण का विस्तार:
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.maximumSize(1000)
.refreshAfterWrite(1, TimeUnit.MINUTES)
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) { // no checked exception
return getGraphFromDatabase(key);
}
public Map<Key, Graph> loadAll(Iterable<? extends K> keys) {
return getAllGraphsFromDatabase(keys);
}
public ListenableFuture<Graph> reload(final Key key, Graph prevGraph) {
if (neverNeedsRefresh(key)) {
return Futures.immediateFuture(prevGraph);
} else {
// asynchronous!
return ListenableFutureTask.create(new Callable<Graph>() {
public Graph call() {
return getGraphFromDatabase(key);
}
});
}
}
});
... जहां "getAllGraphsFromDatabase()" एक समग्र डेटाबेस क्वेरी बल्कि लंबाई से करता है (कुंजी) अलग-अलग प्रश्नों।
लोडिंग कैशे के इन दो घटक एक साथ कैसे खेलते हैं? अगर मेरे अनुरोध में कुछ कुंजी कैश में मौजूद नहीं हैं() कैश में मौजूद नहीं हैं, तो उन्हें loadAll() वाले समूह के रूप में लोड किया जाता है, लेकिन अगर कुछ को ताज़ा करने की आवश्यकता है, तो क्या वे लोड() के साथ अलग-अलग पुनः लोड हो जाते हैं? यदि हां, तो क्या एक reloadAll() का समर्थन करने की योजना है?
[Cache.getAll ताज़ा करने में विफल रहता है # 971] (https://github.com/google/guava/issues/971) अभी भी – Vadzim