0Pricing
PHP Academy · Lekcja

Wzorce unieważniania pamięci podręcznej

Stosuj strategie cache-aside, write-through i unieważniania opartego na TTL

Wzorce unieważniania pamięci podręcznej to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.

Trudny problem

„W informatyce są tylko dwa trudne problemy: unieważnianie pamięci podręcznej i nazywanie rzeczy”. — Phil Karlton. Wiedza o tym, kiedy i jak unieważniać dane w pamięci podręcznej, ma kluczowe znaczenie.

Wygasanie na podstawie TTL (pasywne)

To najprostsza strategia: należy ustawić TTL i zaakceptować, że pamięć podręczna może zwracać nieaktualne dane przez czas nie dłuższy niż ustawiony czas wygaśnięcia. Sprawdza się, gdy niewielka nieaktualność danych jest akceptowalna.

<?php
Cache::put("user:1", $user, 300); // expires in 5 minutes automatically

Unieważnianie write-through

Po zaktualizowaniu danych należy natychmiast usunąć lub zaktualizować odpowiadający im klucz pamięci podręcznej.

<?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);
}

Tagowanie pamięci podręcznej

Należy oznaczać powiązane wpisy pamięci podręcznej tagami, aby można było jednocześnie unieważnić całą grupę — na przykład wszystkie wpisy dotyczące konkretnego użytkownika.

<?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();

Unieważnianie sterowane zdarzeniami

W Laravelu należy używać zdarzeń modeli Eloquent, aby automatycznie unieważniać pamięć podręczną po zapisaniu lub usunięciu modelu.

<?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 z wersjonowaniem

Do kluczy pamięci podręcznej należy dołączać numer wersji. Zwiększenie numeru wersji skutecznie unieważnia wszystkie istniejące wpisy bez ich usuwania.

<?php
$v   = Cache::get("user:version", 1);
$key = "user:{$id}:v{$v}";
// To invalidate: increment the version
Cache::increment("user:version");

Probabilistyczne wczesne wygasanie (PER)

Aby zapobiec lawinie żądań po wygaśnięciu pamięci podręcznej, dla części żądań należy ponownie obliczać jej zawartość nieco wcześniej. Zapobiega to jednoczesnemu wygaśnięciu wpisów na wszystkich serwerach.

Odświeżanie w tle

Zadanie wykonywane w tle ponownie wypełnia często odczytywane wpisy pamięci podręcznej, zanim wygasną. Pamięć podręczna nigdy nie jest pusta, więc odczyty są zawsze szybkie.

Stale-While-Revalidate

Nieaktualne dane są zwracane natychmiast, a pamięć podręczna jest asynchronicznie odświeżana w tle. Eliminuje to skoki opóźnień występujące przy braku wpisu w pamięci podręcznej.

Rozproszone unieważnianie pamięci podręcznej

W konfiguracji wieloserwerowej unieważnienie klucza pamięci podręcznej przez jeden serwer nie powoduje automatycznego wyczyszczenia lokalnych pamięci podręcznych pozostałych serwerów. Należy użyć Redis pub/sub lub współdzielonego magazynu, aby rozgłaszać informacje o unieważnieniach.

Hierarchia pamięci podręcznej

Należy układać pamięci podręczne warstwowo: lokalna pamięć podręczna w procesie (APCu) powinna znajdować się przed rozproszoną pamięcią podręczną (Redis). Lokalna pamięć podręczna jest szybsza, ale po zmianie danych trzeba ją unieważnić we wszystkich instancjach.

Podsumowanie

Typowe wzorce to: wygasanie TTL (proste), usuwanie przy zapisie (dokładne), tagowanie (grupowanie) i sterowanie zdarzeniami (automatyzacja). Należy wybrać rozwiązanie zależnie od wymaganej aktualności danych i oczekiwanej prostoty.

Szybki test

Co robi Cache::tags()->flush()?

Często zadawane pytania

Czy lekcja „Wzorce unieważniania pamięci podręcznej” jest bezpłatna?

Tak — pełny tekst „Wzorce unieważniania pamięci podręcznej” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wzorce unieważniania pamięci podręcznej”?

Stosuj strategie cache-aside, write-through i unieważniania opartego na TTL Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć PHP Academy?

Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wzorce unieważniania pamięci podręcznej”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?

Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Dlaczego buforowanie ma znaczenie w PHP
  2. Redis jako backend pamięci podręcznej PHP
  3. Memcached do buforowania sesji i obiektów
  4. Wzorce unieważniania pamięci podręcznej
← Powrót do PHP Academy