Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: caching, invalidation

Что кэшировать, а что нет? Инвалидация кэша при изменении данных.

Этот вопрос помогает определить критерии выбора данных для кэширования и методы управления актуальностью кэша.

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

Кэшировать стоит данные которые редко меняются, требуют больших вычислений и часто запрашиваются. Не стоит кэшировать персональные данные, часто изменяемую информацию и результаты с коротким временем актуальности. Инвалидация кэша происходит при изменении исходных данных через tags, direct invalidation или TTL. Важно поддерживать консистентность между кэшем и источником данных.

Длинный ответ

Правильный выбор данных для кэширования и грамотная инвалидация критически важны для эффективности системы.

Что кэшировать:

  1. Идеальные кандидаты:

    • Результаты сложных запросов с JOIN

    • Статические данные: категории, справочники

    • HTML фрагменты страниц

    • Результаты расчетов и агрегаций

  2. Плохие кандидаты:

    • Персональные данные пользователей

    • Реальные времени данные (балансы, остатки)

    • Часто изменяемый контент

Методы инвалидации:

  1. TTL (Time To Live)

    • Автоматическое удаление по времени

    • Простота реализации

    • Возможность устаревания данных

  2. Прямая инвалидация

    • Удаление при изменении данных

    • Точечное обновление

    • Сложность управления

  3. Тегирование (Tag-based)

    • Группировка связанных данных

    • Массовая инвалидация

    • Гибкость управления

Пример инвалидации в Laravel:

// Кэширование с тегами
Cache::tags(['products', 'search'])->put($key, $results, 3600);

// Инвалидация при обновлении товара
Product::updated(function ($product) {
    Cache::tags('products')->flush();
});

Стратегии инвалидации:

  • Write-through: обновление кэша при записи

  • Write-behind: асинхронное обновление

  • Refresh-ahead: предварительное обновление

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    4

Навыки

  • PHP

    PHP

Ключевые слова

#caching

#invalidation

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.