Код Middle Кеш и очереди спрашивают часто обновлено
Cache-aside с отрицательным кешированием
Условие
Напиши createCachedGetter({ load, ttlMs, negativeTtlMs, now }). Возвращает async get(id):
- если в кеше есть свежая запись, вернуть её без вызова
load; - иначе вызвать
load(id). Если результат неnull, положить в кеш наttlMs. Еслиnull(объекта нет), положить «отсутствие» наnegativeTtlMs, чтобы не долбить базу запросами несуществующих id; - ошибки
loadне кешировать.
Кроме get вернуть invalidate(id). Итог: { get, invalidate }.
Что проверяют тесты
второй get из кеша
истёк ttl: снова в load
null кешируется на negativeTtlMs
ошибка не кешируется
invalidate
значение 0 и пустая строка кешируются как обычные
Как подойти
Подсказки: 2
- Храни
{ value, expires }, проверяйexpires > now(). - Отсутствие объекта это
value === null: не путай с!value.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Зачем очередь и как сделать её надёжной
Следующий вопрос
Батчинг запросов как в DataLoader