Używam dekoratora EhCache SelfPopulatingCache
i mam problem, gdy pamięć podręczna próbuje załadować nowy wpis, ale nie istnieje (tzn. Nie istnieje w bazie danych). Tak więc pamięć podręczna wstawi do pamięci podręcznej wartość null
, aby odblokować wszelkie inne pobrania klucza, ale wtedy następny wątek wykona to samo wywołanie bazy danych, ponieważ otrzyma wartość "null" z pamięci podręcznej. co oznacza, że uważa, że wpis musi zostać załadowany - nawet jeśli w rzeczywistości jest pusty, ponieważ dane nigdzie nie istnieją. Czuję, że robię coś nie tak.Ehcache - przy użyciu SelfPopulatingCache, gdy dane nie są obecne
(pseudo kod)
Value v = cache.get(key); // multiple threads will block here
if (v == null)
cache.put(key, getValueFromDB()); // this might put a null value
Moje obecne rozwiązanie jest nie stawiać null, ale umieścić zastępczy Object
i sprawdzić to.
Value v = cache.get(key);
if (v == null)
cache.put(key, getValueFromDB());
else if (v == NOENTRYOBJECT)
return null;
else
return v;
Myśli?
Nie wiem, jak twój pseudo-kod odnosi się do 'SelfPopulatingCache'. Jak się używasz? – skaffman
cache = SelfPopulatingCache (lub BlockingCache) ... myśl, że było całkiem jasne – Gandalf