Сделайте декоратор провайдера: запросить локальный кеш, затем 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([]).