Многоуровневое кэширование данных

Сделайте декоратор провайдера: запросить локальный кеш, затем Redis, при промахе — источник; найденный результат положить в более быстрые уровни. Ключ должен учитывать все влияющие аргументы.

Короткий ответ

Что ответить на собеседовании

Сделайте декоратор провайдера: запросить локальный кеш, затем Redis, при промахе — источник; найденный результат положить в более быстрые уровни. Ключ должен учитывать все влияющие аргументы.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо построить механизм кэширования, который последовательно ищет требуемую информацию: сначала в локальной переменной‑кеше, затем в Redis, и только при отсутствии данных обращается к источнику‑поставщику. При получении результата он должен быть записан одновременно в Redis и в локальный кеш.

class DataProvider {
    public function getData(array $arguments): array
    {
        // ...
    }
}
$dataProvider = new DataProvider();
$data = $dataProvider->getData();

Ответ

Сделайте декоратор провайдера: запросить локальный кеш, затем Redis, при промахе — источник; найденный результат положить в более быстрые уровни. Ключ должен учитывать все влияющие аргументы.

Алгоритм: вычислить стабильный ключ → проверить array_key_exists в локальном кеше → прочитать Redis → при промахе вызвать исходный getData($arguments) → записать результат с TTL в Redis и локальный кеш. Для miss используйте отдельный маркер, а не пустой массив: он может быть корректным ответом. Локальный кеш долгоживущего процесса ограничьте по объёму и времени. В исходном примере пропущен обязательный аргумент getData; вызов должен передавать массив, например getData([]).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее