Стратегии аннулирования кэша
Применяйте стратегии cache-aside, сквозной записи и аннулирования на основе TTL
«Стратегии аннулирования кэша» — бесплатный урок PHP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.
Сложная задача
«В информатике есть только две сложные задачи: инвалидация кэша и выбор имён». — Фил Карлтон. Критически важно знать, когда и как делать данные кэша недействительными.
Истечение срока действия по TTL (пассивное)
Самая простая стратегия: задайте TTL и примите, что кэш может возвращать устаревшие данные в течение этого времени. Подходит, когда небольшая неактуальность данных допустима.
<?php
Cache::put("user:1", $user, 300); // expires in 5 minutes automaticallyИнвалидация при записи
При обновлении данных сразу удаляйте или обновляйте соответствующий ключ кэша.
<?php
function updateUser(int $id, array $data): void {
User::find($id)->update($data);
Cache::forget("user:$id"); // delete cache
// Or re-warm:
Cache::put("user:$id", User::find($id), 300);
}Теги кэша
Помечайте связанные записи кэша тегами, чтобы одновременно сделать недействительной целую группу — например, все записи кэша для определённого пользователя.
<?php
// Store with tags:
Cache::tags(["user:1", "posts"])->put("user:1:recent-posts", $posts, 600);
// Invalidate all "user:1" entries:
Cache::tags("user:1")->flush();Инвалидация по событиям
В Laravel используйте события моделей Eloquent, чтобы автоматически делать кэш недействительным при сохранении или удалении модели.
<?php
class User extends Model {
protected static function booted(): void {
static::saved(fn($u) => Cache::forget("user:{$u->id}"));
static::deleted(fn($u) => Cache::forget("user:{$u->id}"));
}
}Стратегия cache-aside с версионированием
Добавляйте номер версии к ключам кэша. Увеличение версии фактически делает все существующие записи недействительными, не удаляя их.
<?php
$v = Cache::get("user:version", 1);
$key = "user:{$id}:v{$v}";
// To invalidate: increment the version
Cache::increment("user:version");Вероятностное досрочное истечение (PER)
Чтобы предотвратить лавину запросов к кэшу, для некоторой доли запросов пересчитывайте кэш немного раньше его истечения. Это предотвращает одновременное истечение данных на всех серверах.
Обновление в фоновом режиме
Фоновое задание заново заполняет часто читаемые записи кэша до их истечения. Кэш никогда не бывает пустым, поэтому чтение всегда выполняется быстро.
Выдача устаревших данных с последующим обновлением
Сразу выдавайте устаревшие данные, одновременно обновляя кэш в фоновом режиме. Это устраняет скачки задержки при отсутствии данных в кэше.
Распределённая инвалидация кэша
В конфигурации с несколькими серверами сервер, сделавший ключ кэша недействительным, не очищает автоматически локальные кэши других серверов. Используйте публикацию и подписку Redis или общее хранилище для рассылки уведомлений об инвалидации.
Иерархия кэшей
Используйте несколько уровней кэширования: локальный кэш внутри процесса (APCu) перед распределённым кэшем (Redis). Локальный кэш работает быстрее, но при изменении данных его нужно сделать недействительным во всех экземплярах.
Итоги
Распространённые шаблоны: истечение по TTL (просто), удаление при записи (точно), теги (группировка), события (автоматически). Выбирайте стратегию в зависимости от того, насколько важна актуальность данных по сравнению с простотой.
Быстрая проверка
Что делает Cache::tags()->flush()?
Часто задаваемые вопросы
Урок «Стратегии аннулирования кэша» бесплатный?
Да — полный текст урока «Стратегии аннулирования кэша» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.
Чему я научусь в уроке «Стратегии аннулирования кэша»?
Применяйте стратегии cache-aside, сквозной записи и аннулирования на основе TTL Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать PHP Academy?
Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Стратегии аннулирования кэша»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке PHP Academy?
Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Зачем нужно кэширование в PHP
- Redis как серверный кэш для PHP
- Memcached для кэширования сессий и объектов
- Стратегии аннулирования кэша