Может быть, это немного академично, но если я реализую кеш для ускорения приложения, как мне лучше всего обрабатывать промахи кеша? (В моем случае языком будет Java, но, возможно, ответ может быть более общим.)
Брось исключение:
ResultType res;
try {
res = Cache.resLookup(someKey);
} catch (NotFoundException e) {
res = Cache.resInsert(someKey, SlowDataSource.resLookup(someKey));
}
Спросите перед извлечением:
ResultType res;
if (Cache.contains(someKey) {
res = Cache.resLookup(someKey);
} else {
res = Cache.resInsert(someKey, SlowDataSource.resLookup(someKey));
}
Возврат null:
ResultType res;
res = Cache.resLookup(someKey);
if (null == res) {
res = Cache.resInsert(someKey, SlowDataSource.resLookup(someKey));
}
Бросать исключение кажется неправильным, в конце концов, это не ошибка. Позволить кэшу выполнить поиск содержимого (), а затем снова получить данные, кажется расточительным, особенно если это будет происходить каждый раз. И проверка null
, конечно, требует, чтобы null
никогда не мог быть действительным результатом ...