2016-03-23 19 views
0

Sorgunun sonucunu önbelleğe yüklemek için yükleme önbelleği kullanıyorum. Bildiğim kadarıyla, anahtar önbellekte bulunmazsa, DB'den yüklenir. Yükleme sırasında önbellek aynı anda mi doldurulur?DB'den yüklenirken yükleme önbelleği yükleniyor

CacheLoader <String, Obj> Loader = new CacheLoader<String, Obj>() { 
     @Override 
     public Obj load(String key) throws Exception {      
       Obj obj = ObjDao.getDs().createQuery(Obj.class).filter("id ==", key).get();      
       return obj;         
     } 
}; 
+1

Evet [CacheLoader] (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheLoader.html) http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/LoadingCache.html), önbelleğe alınmış veya el ile geçersiz kılınana kadar önbellekte saklanan değerleri alır. Hepsi bağlantılı belgelerde var. – andyb

cevap

1

LoadingCache:

Değerler otomatik cache tarafından yüklenen ve tahliye veya manuel olarak geçersiz ya kadar önbellekte saklanır.

LoadingCache.get(K)

:

gerekirse değer bu önbellekte key ilişkilendirilmiş değeri, ilk yükleme döndürür. Bu önbellekle ilişkili gözlenebilir durum, yükleme tamamlanana kadar değiştirilemez.

Başka bir get(K) veya getUnchecked(K) numaralı çağrı key değerini yüklüyorsa, yalnızca bu iş parçacığının bitmesini ve yüklenen değerini döndürmesini bekler. Birden çok iş parçacığının farklı anahtarlar için aynı anda değerleri yükleyebileceğini unutmayın. CacheLoader tarafından yüklenen önbellekler, yeni değerleri önbellekte yüklemek için CacheLoader.load(K)'u arayacaktır. Yeni yüklenen değerler, yükleme tamamlandıktan sonra Cache.asMap().putIfAbsent kullanarak önbelleğe eklenir; Yeni değer yüklenirken başka bir değer anahtarla ilişkilendirildiyse, yeni değer için bir kaldırma bildirimi gönderilir. (A [LoadingCache] kullanılan

İlgili konular