0Pricing
PHP Academy · Урок

Стратегии аннулирования кэша

Применяйте стратегии 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 — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужно кэширование в PHP
  2. Redis как серверный кэш для PHP
  3. Memcached для кэширования сессий и объектов
  4. Стратегии аннулирования кэша
← Назад к PHP Academy