Вступить в клуб →
лёгкаявопросКэш, очереди и фоновые задачи

Цену поменяли, а витрина час показывает старую

Карточка товара кэшируется по схеме cache-aside:

$product = Cache::remember("product:{$id}", 3600, fn () => Product::find($id));

Менеджер изменил цену через админку, в базе новое значение, но на витрине ещё почти час висит старая цена.

Почему так и что нужно сделать?

  • Кэш хранит значение до истечения TTL и об изменении в БД ничего не знает: при сохранении товара нужно сбрасывать или перезаписывать ключ product:{id}
  • Redis отдаёт устаревшее значение из-за отставания реплики, с которой идёт чтение; поможет принудительное чтение с мастера
  • Нужно снизить TTL до одной секунды: это и есть корректное решение задачи инвалидации, а нагрузка на БД вырастет незначительно
  • Кэш живёт только в рамках одного запроса, а старую цену между запросами отдаёт OPcache, который надо сбрасывать при деплое

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела