Ehcache - использование SelfPopulatingCache при отсутствии данных

Я использую декоратор EhCache SelfPopulatingCache , и у меня возникает проблема, когда кеш пытается загрузить новую запись, но ее не существует (т.е. ее не существует в базе данных). Таким образом, кеш поместит значение null в кеш, чтобы разблокировать любые другие попытки получить ключ, но затем следующий поток выполнит тот же вызов базы данных, потому что он получил «null» из кеша. Это означает, что он считает, что запись должна быть загружена, хотя на самом деле она пуста, потому что данных нигде не существует. Я чувствую, что делаю что-то не так.

(псевдокод)

Value v = cache.get(key); // multiple threads will block here
if (v == null)
   cache.put(key, getValueFromDB()); // this might put a null value

Мое текущее решение - не ставить null, а поставить заполнитель Object и проверить его.

Value v = cache.get(key);
if (v == null)
   cache.put(key, getValueFromDB());
else if (v == NOENTRYOBJECT)
   return null;
else
   return v;

Мысли?

6
задан Gandalf 22 December 2010 в 15:13
поделиться