Cache – działanie pamięci podręcznej, jej rodzaje, czyszczenie i wpływ na szybkość strony
Cache to pamięć podręczna służąca do tymczasowego przechowywania danych, które mogą być ponownie potrzebne. Jej podstawowym zadaniem jest przyspieszenie działania urządzenia, programu, strony internetowej albo całej infrastruktury informatycznej. Zamiast za każdym razem pobierać ten sam plik, wykonywać identyczne obliczenie lub ponownie odpytywać bazę danych, system może wykorzystać wcześniej przygotowaną kopię wyniku.
Mechanizm cache występuje praktycznie na każdym poziomie współczesnej technologii. Procesor przechowuje w szybkiej pamięci często wykorzystywane dane i instrukcje. System operacyjny zachowuje fragmenty plików w pamięci. Przeglądarka zapisuje obrazy, arkusze stylów i skrypty odwiedzonych stron. Serwer może przechowywać gotowy kod HTML, a sieć CDN udostępniać pliki z lokalizacji położonej bliżej użytkownika.
Dzięki temu strona może ładować się szybciej, aplikacja reagować sprawniej, a serwer obsługiwać większą liczbę użytkowników bez wykonywania za każdym razem tej samej pracy. Cache zmniejsza również transfer danych i ogranicza obciążenie bazy, procesora oraz sieci.
Pamięć podręczna może jednak powodować problemy. Użytkownik czasami widzi starą wersję strony, mimo że administrator opublikował zmiany. Aplikacja może korzystać z nieaktualnych informacji, a źle skonfigurowany serwer przechować treść, która nie powinna być udostępniana kolejnemu użytkownikowi. Dlatego skuteczne cache wymaga nie tylko zapisywania danych, lecz także właściwego określania ich czasu ważności, sposobu odświeżania oraz momentu usunięcia.
Cache – co to jest
Cache jest warstwą szybkiego dostępu umieszczoną pomiędzy użytkownikiem lub aplikacją a właściwym źródłem danych. Przechowuje kopię informacji albo wynik wcześniejszej operacji, aby kolejne żądanie mogło zostać obsłużone szybciej.
Źródłem danych może być:
- pamięć operacyjna,
- dysk,
- serwer internetowy,
- baza danych,
- zewnętrzne API,
- system plików,
- aplikacja działająca w chmurze.
Wyobraźmy sobie sklep internetowy, którego strona główna prezentuje te same produkty tysiącom odwiedzających. Bez cache każde wejście mogłoby wymagać pobrania danych z bazy, przeliczenia cen, wygenerowania układu oraz utworzenia pełnej odpowiedzi HTML. Jeżeli wynik zostanie zapisany w pamięci podręcznej, kolejnym użytkownikom można wysłać gotową stronę bez powtarzania wszystkich operacji.
Cache nie jest zazwyczaj podstawowym miejscem przechowywania danych. Najczęściej zawiera ich kopię. Oryginał znajduje się nadal w bazie, pliku, systemie źródłowym albo na serwerze.
Jak wymawia się cache
Angielskie słowo „cache” wymawia się w przybliżeniu jak polskie „kasz”. Nie należy wymawiać go jak „kejsz” ani utożsamiać ze słowem „cash”, mimo że oba wyrazy mogą brzmieć podobnie.
W języku polskim powszechnie używa się zarówno określenia „cache”, jak i „pamięć podręczna”. W tekstach technicznych spotyka się również formy takie jak cache’owanie, cachowanie, buforowanie i przechowywanie w pamięci podręcznej.
Cache a pamięć podręczna
Pamięć podręczna jest polskim odpowiednikiem pojęcia cache. Termin podkreśla, że dane są przechowywane „pod ręką”, czyli bliżej miejsca, które ich potrzebuje.
Pamięć może mieć postać sprzętową albo programową. Cache procesora jest fizycznym elementem układu, natomiast cache przeglądarki to mechanizm programowy wykorzystujący pamięć urządzenia.
Cache a bufor
Cache i bufor bywają mylone, ponieważ oba przechowują dane tymczasowo. Ich cele nie są jednak identyczne.
Cache zachowuje dane, aby można było je ponownie wykorzystać i uniknąć powtarzania kosztownej operacji. Bufor pomaga natomiast wyrównywać różnice w tempie przesyłania lub przetwarzania danych.
Podczas oglądania filmu bufor może przechowywać kilka kolejnych sekund nagrania, aby chwilowe spowolnienie internetu nie zatrzymało odtwarzania. Cache może zachować wcześniej pobrane elementy aplikacji, aby nie trzeba było pobierać ich ponownie.
W praktyce granica między tymi mechanizmami bywa płynna, a niektóre systemy używają obu pojęć zamiennie.
Jak działa cache
Działanie pamięci podręcznej można opisać za pomocą prostego procesu. Aplikacja potrzebuje określonego zasobu i najpierw sprawdza, czy znajduje się on w cache. Jeżeli tak, korzysta z zapisanej kopii. Jeżeli nie, pobiera dane z właściwego źródła, zwraca je użytkownikowi i może jednocześnie zapisać w pamięci na przyszłość.
Podstawowy schemat wygląda następująco:
- System otrzymuje żądanie danych.
- Sprawdza pamięć podręczną.
- Jeżeli dane są dostępne i aktualne, zwraca je z cache.
- Jeżeli ich nie ma, pobiera je ze źródła.
- Zapisuje wynik w pamięci podręcznej.
- Kolejne podobne żądania obsługuje szybciej.
Mechanizm wydaje się prosty, ale jego prawidłowe wdrożenie wymaga odpowiedzi na kilka ważnych pytań:
- co powinno być przechowywane,
- gdzie umieścić pamięć,
- jak długo dane są ważne,
- kiedy należy je usunąć,
- co zrobić po zmianie źródła,
- jak zachować się przy awarii cache,
- czy dana odpowiedź może być wspólna dla wielu użytkowników.
Cache hit
Cache hit oznacza trafienie w pamięci podręcznej. Żądany zasób znajduje się w cache i może zostać zwrócony bez sięgania do wolniejszego źródła.
Duża liczba trafień zwykle oznacza, że mechanizm skutecznie odciąża bazę, serwer albo połączenie sieciowe.
Nie należy jednak dążyć do maksymalnego wskaźnika hit ratio za wszelką cenę. Przechowywanie nieaktualnych albo niepotrzebnych danych tylko po to, aby zwiększyć liczbę trafień, może pogorszyć jakość systemu.
Cache miss
Cache miss oznacza brak danych w pamięci podręcznej. System musi pobrać je ze źródła albo wykonać obliczenie.
Brak może wystąpić, ponieważ:
- zasób nigdy wcześniej nie był żądany,
- wpis został usunięty,
- upłynął czas ważności,
- zmienił się klucz,
- pamięć osiągnęła limit i usunęła starsze elementy,
- cache został wyczyszczony.
Pojedynczy cache miss jest naturalny. Problem pojawia się wtedy, gdy niemal każde żądanie omija pamięć, mimo że przechowywane dane powinny być wielokrotnie wykorzystywane.
Cache hit ratio
Cache hit ratio to proporcja żądań obsłużonych z pamięci podręcznej do wszystkich prób odczytu.
Jeżeli na sto żądań osiemdziesiąt zostało obsłużonych z cache, wskaźnik wynosi osiemdziesiąt procent.
Wartość należy interpretować w kontekście aplikacji. W systemie z powtarzalnymi odczytami wysoki wynik może być pożądany. W aplikacji, w której każde żądanie dotyczy innych danych, niższy wskaźnik nie musi oznaczać błędu.
Dlaczego cache przyspiesza działanie systemu
Pobranie danych z lokalnej pamięci jest zwykle szybsze niż odczyt z dysku, zewnętrznego serwera albo bazy. Im dalsze i wolniejsze jest źródło, tym większą korzyść może przynieść pamięć podręczna.
Przykładowo przeglądarka posiada już na urządzeniu logo strony. Podczas kolejnej wizyty nie musi przesyłać całego pliku przez internet. Może użyć lokalnej kopii albo zapytać serwer jedynie o to, czy plik się zmienił.
Serwer aplikacji może natomiast zachować wynik skomplikowanego zapytania do bazy. Zamiast przeliczać raport przy każdym otwarciu, zwraca gotowy rezultat.
Mniejsza liczba obliczeń
Generowanie strony, obrazu, raportu lub odpowiedzi API może wymagać wielu operacji. Cache umożliwia ponowne wykorzystanie wyniku.
Jest to szczególnie wartościowe przy:
- skomplikowanych zapytaniach do bazy,
- generowaniu miniaturek,
- renderowaniu stron,
- analizie danych,
- pobieraniu informacji z zewnętrznych usług,
- przeliczaniu statystyk.
Mniejsze obciążenie serwera
Jeżeli większość popularnych zasobów jest obsługiwana z pamięci, serwer wykonuje mniej pracy. Może dzięki temu obsłużyć większy ruch bez proporcjonalnego zwiększania zasobów.
Cache nie zastępuje odpowiedniej architektury, ale może znacznie ograniczyć koszty działania.
Niższy transfer danych
Przeglądarkowy cache pozwala ponownie wykorzystać lokalne pliki. CDN może natomiast dostarczyć zasób z węzła położonego blisko użytkownika, zamiast za każdym razem pobierać go z serwera źródłowego.
Zmniejsza to transfer i liczbę dalekich połączeń.
Krótszy czas odpowiedzi
Szybsza odpowiedź wpływa na komfort użytkownika. Strona reagująca natychmiast jest łatwiejsza w obsłudze niż serwis, w którym każda czynność wymaga oczekiwania na bazę lub zewnętrzny system.
Rodzaje cache
Pamięć podręczna występuje na wielu poziomach. Dane mogą przechodzić przez kilka cache, zanim dotrą do użytkownika.
Typowa strona internetowa może korzystać jednocześnie z:
- cache procesora,
- cache systemu operacyjnego,
- pamięci aplikacji,
- cache bazy danych,
- cache pełnej strony,
- serwera proxy,
- CDN,
- cache przeglądarki,
- service workera.
Każda warstwa ma inny zakres oraz cel.
Cache procesora
Procesor wykonuje ogromną liczbę operacji i potrzebuje bardzo szybkiego dostępu do danych. Pamięć RAM jest znacznie wolniejsza od samego rdzenia procesora. Dlatego pomiędzy nimi znajduje się pamięć cache.
Przechowuje ona często lub niedawno używane instrukcje i dane. Dzięki temu procesor nie musi przy każdej operacji czekać na dostęp do pamięci głównej.
Cache L1
L1 jest najmniejszą i najszybszą warstwą pamięci podręcznej procesora. Znajduje się bardzo blisko rdzenia i zazwyczaj jest podzielona na pamięć danych oraz instrukcji.
Jej pojemność jest niewielka, ale czas dostępu bardzo krótki.
Cache L2
L2 jest większa od L1, ale nieco wolniejsza. Może być przypisana do pojedynczego rdzenia lub zorganizowana inaczej zależnie od architektury procesora.
Cache L3
L3 ma zazwyczaj większą pojemność i bywa współdzielona między rdzeniami. Jest wolniejsza od L1 i L2, lecz nadal znacznie szybsza od pamięci RAM.
Znaczenie cache procesora
Większa pamięć cache może poprawiać wydajność, ale nie jest jedynym parametrem określającym szybkość procesora. Liczą się również architektura, opóźnienia, taktowanie, liczba rdzeni oraz charakter wykonywanych zadań.
Nie należy porównywać dwóch procesorów wyłącznie na podstawie pojemności cache.
Cache przeglądarki
Cache przeglądarki zapisuje zasoby pobrane podczas odwiedzania stron. Mogą to być:
- obrazy,
- fonty,
- arkusze CSS,
- pliki JavaScript,
- dokumenty HTML,
- odpowiedzi API,
- multimedia.
Podczas kolejnej wizyty przeglądarka może wykorzystać lokalną kopię, o ile zasady przesłane przez serwer na to pozwalają.
Gdzie znajduje się cache przeglądarki
Dane są przechowywane na urządzeniu użytkownika. Część może znajdować się w pamięci operacyjnej, a część na dysku.
Memory cache działa szybko, lecz zazwyczaj jest krótkotrwały. Disk cache może zachowywać zasoby także po zamknięciu karty lub programu.
Co zapisuje przeglądarka
Przeglądarka nie podejmuje wszystkich decyzji samodzielnie. Serwer może przesłać nagłówki wskazujące:
- czy zasób może być przechowywany,
- jak długo jest świeży,
- czy wymaga ponownej walidacji,
- czy może znaleźć się we wspólnym cache,
- czy musi pozostać prywatny.
Jeżeli nagłówki nie są jednoznaczne, przeglądarka może w określonych sytuacjach zastosować mechanizmy heurystyczne.
Czy cache przeglądarki jest tym samym co historia
Nie. Historia zawiera listę odwiedzonych stron, a cache przechowuje pliki i odpowiedzi ułatwiające ich ponowne wyświetlenie.
Usunięcie historii nie zawsze usuwa wszystkie dane cache. Przeglądarki zazwyczaj pozwalają wybrać osobno historię, pliki cookie, pamięć podręczną, hasła i dane formularzy.
Cache a pliki cookie
Plik cookie przechowuje niewielkie informacje związane z sesją, preferencjami albo identyfikacją użytkownika. Cache przechowuje głównie kopie zasobów i odpowiedzi.
Wyczyszczenie cache zwykle nie powoduje wylogowania. Usunięcie cookies może natomiast zakończyć sesję i usunąć zapisane ustawienia strony.
Cache HTTP
Cache HTTP jest mechanizmem określającym sposób przechowywania odpowiedzi przesyłanych przez protokół HTTP. Może działać w przeglądarce oraz w pośrednich systemach, takich jak proxy i CDN.
Serwer steruje zachowaniem cache za pomocą nagłówków odpowiedzi. Najważniejszym z nich jest Cache-Control.
Cache-Control
Nagłówek Cache-Control zawiera dyrektywy opisujące zasady przechowywania i ponownego używania odpowiedzi.
Przykład:
Cache-Control: public, max-age=31536000, immutable
Taka konfiguracja może być odpowiednia dla wersjonowanego pliku statycznego, którego adres zmienia się po każdej aktualizacji.
Inny przykład:
Cache-Control: no-cache
no-cache nie oznacza automatycznie całkowitego zakazu zapisu. Wskazuje, że odpowiedź powinna zostać ponownie zweryfikowana przed wykorzystaniem.
max-age
Dyrektywa max-age określa czas świeżości w sekundach.
Przykład:
Cache-Control: max-age=3600
Odpowiedź może być traktowana jako świeża przez godzinę.
Po upływie tego czasu nie musi zostać natychmiast usunięta. Cache może próbować zweryfikować ją z serwerem.
public
public wskazuje, że odpowiedź może być przechowywana również przez współdzielone pamięci, takie jak CDN lub proxy.
Nie należy stosować tej dyrektywy do spersonalizowanych treści zawierających dane konkretnego użytkownika, jeżeli konfiguracja nie zapewnia właściwego rozdzielenia odpowiedzi.
private
private oznacza, że odpowiedź może zostać zapisana w prywatnej pamięci użytkownika, na przykład w przeglądarce, ale nie powinna być przechowywana jako wspólna odpowiedź dla wielu osób.
Przykład:
Cache-Control: private, max-age=300
no-cache
Nazwa jest myląca. Dyrektywa pozwala przechowywać odpowiedź, ale wymaga jej walidacji przed ponownym użyciem.
Jest przydatna w przypadku treści, które można zachować lokalnie, lecz przed wyświetleniem trzeba sprawdzić ich aktualność.
no-store
no-store instruuje cache, aby nie przechowywał odpowiedzi.
Może być stosowany przy szczególnie wrażliwych informacjach. Należy jednak używać go świadomie, ponieważ całkowicie uniemożliwia korzyści wynikające z pamięci HTTP i może wpływać na inne mechanizmy przeglądarki.
must-revalidate
must-revalidate wymaga, aby nieaktualna odpowiedź została zweryfikowana przed użyciem.
Jeżeli serwer jest niedostępny, cache nie powinien swobodnie korzystać ze starej wersji, chyba że pozwalają na to inne dyrektywy.
immutable
immutable wskazuje, że zasób nie zmieni się w okresie świeżości. Przeglądarka nie musi sprawdzać go ponownie nawet przy zwykłym odświeżeniu.
Dyrektywa jest odpowiednia dla plików wersjonowanych, na przykład:
app.4f73a2.js
Po zmianie kodu tworzony jest nowy adres, więc stary plik może być przechowywany bardzo długo.
s-maxage
s-maxage określa czas świeżości w pamięci współdzielonej, na przykład CDN. Może różnić się od czasu stosowanego w prywatnej pamięci przeglądarki.
Przykład:
Cache-Control: public, max-age=60, s-maxage=3600
Przeglądarka może traktować odpowiedź jako świeżą przez minutę, a CDN przez godzinę.
Walidacja pamięci podręcznej
Gdy zasób przestaje być świeży, przeglądarka nie zawsze musi pobierać go ponownie w całości. Może wysłać żądanie warunkowe i zapytać serwer, czy zawartość się zmieniła.
Jeżeli nie, serwer zwraca kod 304 Not Modified bez pełnej treści odpowiedzi. Oszczędza to transfer, choć nadal wymaga połączenia sieciowego.
ETag
ETag jest identyfikatorem wersji zasobu. Serwer przesyła go w odpowiedzi:
ETag: \"a7c94f\"
Przy kolejnej próbie klient może wysłać:
If-None-Match: \"a7c94f\"
Jeżeli identyfikator jest nadal aktualny, serwer odpowiada kodem 304.
Last-Modified
Nagłówek Last-Modified informuje o czasie ostatniej modyfikacji zasobu.
Przeglądarka może później wysłać If-Modified-Since. Jeżeli plik nie zmienił się od podanego momentu, serwer zwraca 304.
ETag może być dokładniejszym identyfikatorem niż data, ale oba mechanizmy są często wykorzystywane.
Fresh i stale
Świeża odpowiedź może być wykorzystana bez kontaktu z serwerem. Odpowiedź stale przekroczyła ustalony czas i wymaga walidacji albo pobrania nowszej wersji.
Nie oznacza to, że stare dane są zawsze bezużyteczne. Niektóre konfiguracje pozwalają przez krótki czas wykorzystać wcześniejszą odpowiedź, na przykład podczas odświeżania w tle lub chwilowej awarii źródła.
Cache aplikacji
Aplikacje mobilne i komputerowe przechowują dane, aby szybciej działać i ograniczać transfer.
Cache aplikacji może obejmować:
- miniatury zdjęć,
- ostatnio otwierane dokumenty,
- odpowiedzi API,
- elementy interfejsu,
- mapy,
- multimedia,
- wyniki wyszukiwania.
Dzięki temu aplikacja może szybciej uruchamiać ekran albo częściowo działać bez internetu.
Cache na Androidzie
System Android pozwala aplikacjom przechowywać tymczasowe pliki. W ustawieniach urządzenia można zazwyczaj usunąć cache konkretnej aplikacji.
Wyczyszczenie pamięci podręcznej nie powinno usuwać konta ani głównych danych użytkownika, choć aplikacja może ponownie pobierać pliki i przez pewien czas działać wolniej.
Opcja „Wyczyść dane” ma znacznie szersze działanie. Może przywrócić aplikację do stanu początkowego i wylogować użytkownika.
Cache na iPhonie
iOS zarządza znaczną częścią pamięci automatycznie. Nie każda aplikacja udostępnia osobny przycisk czyszczenia cache.
W niektórych przypadkach można usunąć dane z poziomu ustawień aplikacji, odinstalować program albo skorzystać z funkcji odciążenia aplikacji. Zakres zależy od programu i wersji systemu.
Czy czyszczenie cache przyspiesza telefon
Nie zawsze. Cache istnieje właśnie po to, aby aplikacje działały szybciej. Po jego usunięciu program musi ponownie pobrać lub wygenerować dane.
Czyszczenie może pomóc, gdy:
- pliki są uszkodzone,
- aplikacja pokazuje starą zawartość,
- pamięć podręczna zajmuje nadmiernie dużo miejsca,
- występują błędy ładowania,
- po aktualizacji pozostały niezgodne dane.
Regularne kasowanie wszystkiego bez potrzeby nie jest konieczne.
Cache systemu operacyjnego
System operacyjny wykorzystuje pamięć podręczną do przyspieszania dostępu do plików, programów i urządzeń.
Wolna pamięć RAM może być wykorzystywana do przechowywania ostatnio odczytanych danych. Gdy inny program potrzebuje miejsca, system może zwolnić część cache.
Dlatego wysoki poziom wykorzystania RAM nie zawsze oznacza problem. System może świadomie przeznaczać dostępną pamięć na cache, ponieważ niewykorzystana pamięć nie przyspiesza pracy.
Page cache
Page cache przechowuje w RAM fragmenty plików odczytanych z dysku. Kolejny dostęp do tego samego pliku może zostać obsłużony bez ponownego odczytu z wolniejszego nośnika.
DNS cache
Cache DNS przechowuje wyniki tłumaczenia nazw domen na adresy IP. Dzięki temu urządzenie nie musi za każdym razem wykonywać pełnego zapytania DNS.
Wpis ma określony czas ważności. Jeżeli właściciel domeny zmieni adres serwera, niektóre urządzenia mogą przez pewien czas korzystać ze starego wyniku.
Thumbnail cache
System może przechowywać miniatury zdjęć i filmów, aby folder nie musiał generować ich przy każdym otwarciu.
Usunięcie miniatur nie kasuje oryginalnych plików, ale ich ponowne tworzenie może przez chwilę obciążać urządzenie.
Cache DNS
Pamięć DNS może istnieć na kilku poziomach:
- w przeglądarce,
- w systemie operacyjnym,
- w routerze,
- u operatora,
- w resolverze DNS,
- w innych serwerach pośrednich.
Każdy wpis posiada TTL, czyli czas życia. Po jego upływie resolver powinien ponownie pobrać aktualne informacje.
Dlaczego po zmianie domeny widać stary serwer
Po zmianie rekordu DNS część użytkowników może nadal trafiać do wcześniejszego serwera. Wynika to z zapisanych wpisów, których TTL jeszcze nie wygasł.
Zjawisko bywa nazywane propagacją DNS, choć w praktyce często chodzi właśnie o stopniowe wygasanie pamięci w różnych systemach.
Czyszczenie DNS cache
Lokalny cache DNS można wyczyścić za pomocą odpowiednich poleceń systemowych. Nie usuwa to jednak wpisów w resolverach operatora ani na innych urządzeniach.
Czyszczenie może pomóc, jeżeli komputer nadal używa nieaktualnego adresu, mimo że zmiana została już wdrożona.
Cache serwera
Serwer może przechowywać gotowe odpowiedzi lub wyniki działania aplikacji. Pozwala to ograniczyć obciążenie procesora, bazy i systemu plików.
Full page cache
Full page cache przechowuje gotowy dokument HTML. Kolejny użytkownik otrzymuje go bez pełnego uruchamiania aplikacji.
Rozwiązanie działa dobrze przy stronach publicznych, które są takie same dla wielu odwiedzających, na przykład:
- artykułach,
- stronach kategorii,
- stronach informacyjnych,
- publicznych ofertach.
Należy zachować ostrożność przy panelach użytkownika, koszykach i stronach spersonalizowanych.
Fragment cache
Fragment caching przechowuje tylko część strony. Przykładowo menu, ranking produktów albo lista popularnych wpisów może być generowana raz na kilka minut.
Pozostałe elementy strony mogą pozostać dynamiczne.
Opcode cache
W aplikacjach PHP kod źródłowy jest tłumaczony do postaci wykonywalnej. Opcode cache przechowuje wynik tej kompilacji, aby proces nie musiał być powtarzany przy każdym żądaniu.
Popularnym rozwiązaniem jest OPcache.
Cache obiektowy
Object cache przechowuje wyniki operacji aplikacji, na przykład dane pobrane z bazy lub utworzone obiekty.
Może działać tylko w ramach pojedynczego żądania albo korzystać z trwałego systemu, takiego jak Redis czy Memcached.
Cache bazy danych
Bazy danych korzystają z własnych mechanizmów pamięci oraz mogą współpracować z zewnętrznym cache.
Często wykonywane zapytanie może być kosztowne, szczególnie gdy obejmuje duże tabele, sortowanie i wiele połączeń. Zachowanie wyniku pozwala uniknąć powtarzania pracy.
Query cache
Query cache przechowuje wyniki zapytań. Jeżeli identyczne zapytanie pojawia się ponownie i dane źródłowe nie zmieniły się, system może zwrócić zapisany rezultat.
Nie każda baza wykorzystuje klasyczny query cache. Współczesne systemy częściej opierają się na buforowaniu stron danych, planów zapytań oraz zewnętrznych warstwach.
Buffer pool
Baza może przechowywać często używane strony danych i indeksów w pamięci operacyjnej. Dzięki temu nie musi za każdym razem odczytywać ich z dysku.
Cache planów zapytań
Silnik bazy analizuje zapytanie i wybiera sposób jego wykonania. Zachowanie planu może zmniejszyć koszt ponownego przygotowania podobnych operacji.
Redis jako cache
Redis jest systemem przechowującym dane głównie w pamięci. Może działać jako szybka warstwa pomiędzy aplikacją a główną bazą.
Przechowuje między innymi:
- wyniki zapytań,
- sesje,
- liczniki,
- listy,
- tokeny,
- dane tymczasowe.
Redis nie powinien być dodawany tylko dlatego, że jest popularny. Wymaga zaplanowania kluczy, czasu ważności, ograniczeń pamięci oraz zachowania przy awarii.
Memcached
Memcached jest prostym, rozproszonym systemem pamięci podręcznej. Przechowuje pary klucz–wartość i jest wykorzystywany do szybkiego udostępniania tymczasowych danych.
Wybór między Redisem, Memcached i innymi rozwiązaniami zależy od potrzeb aplikacji.
Cache-aside
Cache-aside jest popularnym wzorcem, w którym aplikacja samodzielnie zarządza odczytem z pamięci.
Proces wygląda następująco:
- Aplikacja sprawdza cache.
- Jeżeli wpis istnieje, zwraca go.
- Jeżeli go nie ma, pobiera dane z bazy.
- Zapisuje wynik w cache.
- Zwraca odpowiedź.
Zaletą jest przechowywanie tylko rzeczywiście używanych danych. Wadą może być pierwsze wolniejsze żądanie oraz konieczność synchronizowania zmian.
Write-through cache
W modelu write-through zapis trafia do cache i właściwego źródła w ramach tej samej operacji. Dzięki temu pamięć pozostaje aktualna.
Podejście może zwiększać czas zapisu, ale upraszcza późniejsze odczyty.
Write-behind cache
Write-behind, nazywany także write-back, zapisuje zmianę najpierw w cache, a następnie przekazuje ją do trwałego źródła w tle.
Może przyspieszyć operacje, ale zwiększa ryzyko utraty danych, jeżeli pamięć ulegnie awarii przed zapisaniem zmian w bazie.
Nie jest odpowiedni dla każdego rodzaju informacji.
Read-through cache
W read-through aplikacja odczytuje dane za pośrednictwem warstwy cache. Jeżeli wpisu nie ma, sama warstwa pobiera go ze źródła.
Aplikacja nie musi bezpośrednio implementować całej logiki braków.
CDN i edge cache
CDN, czyli Content Delivery Network, jest siecią serwerów rozmieszczonych w wielu lokalizacjach. Przechowuje kopie zasobów bliżej użytkowników.
Osoba odwiedzająca stronę z Polski może pobrać obraz z europejskiego węzła, zamiast łączyć się za każdym razem z serwerem znajdującym się w innym regionie świata.
Co może przechowywać CDN
CDN często cache’uje:
- obrazy,
- skrypty,
- arkusze stylów,
- fonty,
- pliki wideo,
- dokumenty do pobrania,
- publiczne strony HTML,
- odpowiedzi API.
Zakres zależy od konfiguracji.
Origin server
Origin jest serwerem źródłowym, na którym znajduje się właściwa wersja zasobu. Gdy CDN nie posiada pliku albo jego kopia wygasła, pobiera dane z originu.
Edge server
Edge server to węzeł CDN położony bliżej użytkownika. Odpowiada na żądania bez konieczności każdorazowego kontaktu z originem.
Cache purge w CDN
Po aktualizacji pliku administrator może wyczyścić cache CDN. Operacja jest określana jako purge albo invalidation.
Nie warto wykonywać pełnego purge po każdej drobnej zmianie, jeżeli można usunąć tylko wybrane adresy.
Cache w WordPressie
WordPress generuje strony na podstawie kodu PHP, bazy danych, motywu i wtyczek. Bez cache każde wejście może wymagać ponownego wykonania wielu operacji.
Witryna może korzystać z kilku warstw pamięci:
- cache przeglądarki,
- cache pełnych stron,
- cache obiektów,
- OPcache,
- cache CDN,
- cache hostingu,
- cache bazy.
Wtyczka cache WordPress
Popularne wtyczki mogą generować statyczne wersje stron, ustawiać nagłówki, minifikować pliki i integrować się z CDN.
Nie należy instalować kilku podobnych wtyczek jednocześnie bez zrozumienia ich działania. Nakładające się funkcje mogą prowadzić do błędów, podwójnej minifikacji i nieprzewidywalnego odświeżania.
Cache strony WordPress
Wtyczka może zapisać gotowy HTML artykułu. Kolejne odwiedziny nie wymagają pełnego uruchomienia WordPressa.
Po edycji wpisu cache powinien zostać automatycznie wyczyszczony. Jeżeli nie, użytkownicy mogą nadal widzieć starą wersję.
Object cache WordPress
WordPress posiada mechanizm obiektowej pamięci, który domyślnie działa w ramach pojedynczego żądania. Trwałe rozwiązanie może zostać oparte na Redisie lub Memcached.
Jest szczególnie przydatne w dużych sklepach i serwisach wykonujących wiele powtarzalnych zapytań.
Cache WooCommerce
Sklep wymaga ostrożniejszej konfiguracji. Nie powinno się udostępniać wspólnej kopii takich stron jak:
- koszyk,
- konto klienta,
- finalizacja zamówienia,
- historia zamówień.
Wtyczki zwykle automatycznie wykluczają te adresy, ale konfigurację trzeba przetestować.
Cache sklepu internetowego
W sklepie cache może znacznie przyspieszyć strony produktów i kategorii. Jednocześnie dane o cenie, dostępności i koszyku muszą pozostać prawidłowe.
Cena produktu
Jeżeli ceny zmieniają się często, zbyt długi czas cache może powodować prezentowanie starej wartości.
Po aktualizacji cennika system powinien unieważnić powiązane strony i odpowiedzi API.
Stan magazynowy
Dane magazynowe są szczególnie wrażliwe na opóźnienia. Użytkownik nie powinien widzieć informacji o dostępności produktu, który został już wyprzedany.
Można przechowywać statyczną część strony dłużej, a stan magazynowy pobierać osobno lub odświeżać częściej.
Koszyk użytkownika
Koszyk jest spersonalizowany i nie może zostać przypadkowo udostępniony innemu użytkownikowi. System powinien odpowiednio rozróżniać sesje oraz wyłączać prywatne odpowiedzi ze wspólnego cache.
Cache API
Interfejs API może zwracać te same dane wielu klientom. Pamięć podręczna zmniejsza liczbę operacji i przyspiesza odpowiedzi.
Cache API można stosować na poziomie:
- klienta,
- bramy API,
- reverse proxy,
- CDN,
- aplikacji,
- bazy.
Publiczne odpowiedzi API
Dane publiczne, takie jak lista krajów albo ogólne informacje o produkcie, mogą być przechowywane wspólnie.
Prywatne odpowiedzi API
Dane konta użytkownika wymagają szczególnej ostrożności. Klucz cache musi uwzględniać tożsamość i uprawnienia, a odpowiedź nie może trafić do publicznego CDN.
Vary
Nagłówek Vary informuje cache, że odpowiedź zależy od określonych nagłówków żądania.
Przykład:
Vary: Accept-Encoding
Oznacza to, że wersja skompresowana i nieskompresowana powinny być traktowane oddzielnie.
Nieprzemyślane użycie Vary z bardzo zmiennymi wartościami może znacznie ograniczyć skuteczność cache.
Cache w aplikacjach PWA
Progressive Web App może korzystać z service workera, czyli skryptu działającego pomiędzy aplikacją a siecią. Pozwala on przechwytywać żądania i korzystać z Cache API.
Dzięki temu aplikacja może:
- działać częściowo bez internetu,
- szybciej uruchamiać interfejs,
- pokazywać zapisane artykuły,
- udostępniać stronę awaryjną offline.
Cache first
Strategia cache first najpierw sprawdza pamięć. Sieć jest używana dopiero wtedy, gdy zasobu nie ma.
Nadaje się do plików, które rzadko się zmieniają.
Network first
Network first próbuje pobrać aktualną odpowiedź z sieci. Jeżeli połączenie jest niedostępne, korzysta z cache.
Sprawdza się przy treściach, które powinny być możliwie aktualne.
Stale while revalidate
Strategia natychmiast pokazuje zapisaną wersję, a w tle pobiera nową. Użytkownik szybko otrzymuje treść, która może zostać zaktualizowana przy kolejnej wizycie.
Cache only i network only
Cache only działa wyłącznie na zapisanych zasobach, a network only zawsze korzysta z sieci. Obie strategie mają bardziej specjalistyczne zastosowania.
Czas życia cache
TTL, czyli Time to Live, określa, jak długo wpis może być uznawany za ważny.
Nie istnieje jeden optymalny TTL dla wszystkich danych. Wartość zależy od tego, jak często treść się zmienia i jak poważne są skutki pokazania starszej wersji.
Krótki TTL
Krótki czas jest odpowiedni dla:
- cen,
- dostępności,
- wyników na żywo,
- dynamicznych rankingów,
- często zmienianych paneli.
Zmniejsza ryzyko nieaktualności, ale zwiększa liczbę odwołań do źródła.
Długi TTL
Długi czas pasuje do:
- wersjonowanych plików CSS i JS,
- fontów,
- stałych obrazów,
- dokumentacji archiwalnej,
- niezmiennych słowników.
TTL a unieważnianie
Nawet przy długim czasie system może aktywnie usunąć wpis po zmianie źródła. Jest to często lepsze niż ustawianie bardzo krótkiego TTL dla wszystkich zasobów.
Invalidation – unieważnianie cache
Unieważnianie jest jednym z najtrudniejszych elementów pracy z pamięcią podręczną. System musi wiedzieć, kiedy zapisana kopia przestała odpowiadać źródłu.
Usuwanie po zmianie
Po zapisaniu nowej wersji produktu aplikacja może usunąć odpowiedni wpis. Kolejne żądanie pobierze świeże dane i ponownie wypełni cache.
Aktualizacja wpisu
Zamiast usuwać dane, system może od razu zaktualizować pamięć.
Wersjonowanie adresów
Pliki statyczne często otrzymują nazwę zawierającą hash albo numer wersji:
style.a18f4d.css
Po zmianie tworzony jest nowy adres. Przeglądarka pobiera nowy plik, a poprzedni może pozostać długo w cache bez powodowania problemu.
Ręczne czyszczenie
Administrator może usunąć całą pamięć albo wybrane adresy. Jest to przydatne awaryjnie, ale nie powinno zastępować automatycznego unieważniania.
Cache stampede
Cache stampede pojawia się, gdy popularny wpis wygasa i bardzo wiele żądań jednocześnie próbuje odtworzyć dane ze źródła.
Zamiast jednego zapytania do bazy powstają setki lub tysiące identycznych operacji. Może to przeciążyć system.
Jak ograniczyć stampede
Stosuje się między innymi:
- blokadę na czas odtwarzania wpisu,
- odświeżanie przed wygaśnięciem,
- losowe różnice w TTL,
- stale-while-revalidate,
- pojedyncze żądanie odpowiedzialne za regenerację.
Cache warming
Cache warming oznacza wcześniejsze wypełnienie pamięci, zanim pojawią się prawdziwi użytkownicy.
Po wyczyszczeniu cache system może automatycznie odwiedzić najważniejsze strony albo pobrać najczęściej używane dane. Dzięki temu pierwsza osoba nie musi czekać na pełne wygenerowanie odpowiedzi.
Rozgrzewanie jest przydatne po wdrożeniu nowej wersji, restarcie serwera lub pełnym purge.
Cache eviction
Pamięć ma ograniczoną pojemność. Gdy zabraknie miejsca, system musi zdecydować, które elementy usunąć.
Popularne strategie obejmują:
- LRU – usuwanie najdawniej używanych danych,
- LFU – usuwanie najrzadziej używanych,
- FIFO – usuwanie najstarszych wpisów,
- losowe usuwanie,
- usuwanie wpisów z najkrótszym pozostałym TTL.
Wybór zależy od charakteru danych.
Kiedy wyczyścić cache
Czyszczenie jest przydatne, gdy pamięć zawiera nieaktualne lub uszkodzone dane.
Typowe sytuacje to:
- strona wygląda inaczej niż powinna,
- po aktualizacji nadal widać stary układ,
- aplikacja nie ładuje nowych informacji,
- pliki zajmują zbyt dużo miejsca,
- występują błędy logowania lub interfejsu,
- zmieniono DNS,
- administrator wdrożył nową wersję serwisu.
Nie należy traktować czyszczenia cache jako uniwersalnego sposobu naprawiania wszystkich problemów. Jeżeli błąd znajduje się w kodzie albo na serwerze, usunięcie lokalnych plików go nie rozwiąże.
Jak wyczyścić cache przeglądarki
Sposób zależy od programu i urządzenia. Zazwyczaj należy przejść do ustawień prywatności lub danych przeglądania, wybrać obrazy i pliki zapisane w pamięci podręcznej, a następnie określić zakres czasu.
Przed zatwierdzeniem warto sprawdzić, czy nie zaznaczono również:
- plików cookie,
- zapisanych haseł,
- danych formularzy,
- historii.
Ich usunięcie może spowodować wylogowanie i utratę wygodnych ustawień.
Hard refresh
Twarde odświeżenie próbuje pobrać zasoby ponownie z pominięciem części lokalnego cache. Jest przydatne podczas testowania zmian.
Skrót zależy od systemu i przeglądarki. Nie zawsze usuwa wszystkie warstwy pamięci, szczególnie CDN, service workera lub cache serwera.
Tryb incognito
Tryb prywatny tworzy oddzielną sesję z własnym magazynem danych. Może pomóc sprawdzić stronę bez części zapisanych informacji, ale nie gwarantuje pominięcia każdego cache sieciowego lub serwerowego.
Cache a prywatność
Cache może przechowywać fragmenty odwiedzonych stron na urządzeniu. Na współdzielonym komputerze inna osoba mogłaby potencjalnie uzyskać dostęp do części danych.
Wrażliwe odpowiedzi powinny korzystać z odpowiednich nagłówków ograniczających przechowywanie. Sama aplikacja musi również zabezpieczać sesję oraz dostęp do informacji.
Prywatne dane w shared cache
Najpoważniejszym błędem jest zapisanie spersonalizowanej odpowiedzi we wspólnym cache i udostępnienie jej kolejnemu użytkownikowi.
Może to doprowadzić do ujawnienia:
- danych konta,
- zamówień,
- adresów,
- dokumentów,
- informacji finansowych.
Dlatego cache key, nagłówki i sposób rozpoznawania sesji muszą być dokładnie zaprojektowane.
Wylogowanie a cache
Po wylogowaniu strona powinna uniemożliwić dostęp do chronionych danych. Samo naciśnięcie przycisku wstecz nie może ujawniać informacji bez ponownej autoryzacji.
Wymaga to odpowiedniej konfiguracji aplikacji i nagłówków, a nie tylko usunięcia ciasteczka.
Cache a bezpieczeństwo
Pamięć podręczna sama w sobie nie jest zagrożeniem, ale błędna konfiguracja może prowadzić do podatności.
Cache poisoning
Cache poisoning polega na umieszczeniu w pamięci złośliwej albo nieprawidłowej odpowiedzi, która następnie zostaje przekazana innym użytkownikom.
Atak może wykorzystywać różnice w sposobie budowania klucza cache, nieuwzględnione nagłówki albo nieprawidłową walidację danych wejściowych.
Web cache deception
Web cache deception próbuje skłonić system do zapisania prywatnej treści pod adresem wyglądającym jak publiczny plik. Jeżeli pamięć zostanie błędnie skonfigurowana, odpowiedź może zostać udostępniona bez autoryzacji.
Cache key
Klucz określa, które żądania są uznawane za odpowiadające temu samemu wpisowi. Może uwzględniać:
- adres,
- metodę,
- parametry,
- wybrane nagłówki,
- język,
- urządzenie,
- stan użytkownika.
Pominięcie ważnego elementu może spowodować zwracanie niewłaściwych danych.
Cache a SEO
Cache nie jest bezpośrednim sposobem na uzyskanie wysokich pozycji, ale może pośrednio wspierać SEO poprzez zwiększenie wydajności oraz ograniczenie obciążenia serwera.
Szybsza strona może poprawiać komfort użytkownika i wybrane metryki wydajności. Sprawniejszy serwer jest także mniej narażony na problemy podczas intensywnego indeksowania.
Google może korzystać z mechanizmów HTTP, takich jak ETag i Last-Modified, podczas pobierania zasobów. Poprawna konfiguracja może ograniczać przesyłanie niezmienionych danych.
Cache a szybkość strony
Długie przechowywanie wersjonowanych zasobów statycznych ogranicza liczbę ponownych pobrań. Użytkownik wracający na stronę może wykorzystać już zapisane fonty, skrypty i obrazy.
Nie należy jednak ignorować rozmiaru plików tylko dlatego, że są cache’owane. Pierwsza wizyta nadal wymaga ich pobrania.
Cache a Core Web Vitals
Pamięć może wpływać na czas ładowania, ale nie rozwiązuje wszystkich problemów Core Web Vitals.
Może pomóc przez:
- szybsze dostarczenie HTML,
- krótszy czas odpowiedzi serwera,
- ponowne wykorzystanie zasobów,
- dostarczanie plików z CDN.
Nie poprawi automatycznie ciężkiego JavaScriptu, niestabilnego układu albo wolnej reakcji interfejsu.
Stara treść w cache a indeksowanie
Jeżeli robot otrzymuje starą wersję strony z cache, może później zauważyć aktualizację. Przy ważnych zmianach należy prawidłowo unieważnić pamięć.
Nie ma potrzeby wyłączać cache całej strony z obawy przed wyszukiwarką. Trzeba jedynie zarządzać aktualnością.
Cache strony a dynamiczna treść
Nie każda część witryny powinna mieć taki sam czas przechowywania.
Strona może składać się z:
- stałego nagłówka,
- publicznej treści,
- dynamicznej ceny,
- informacji o użytkowniku,
- rekomendacji,
- koszyka.
Dobre rozwiązanie cache’uje stabilne elementy długo, a dynamiczne aktualizuje częściej lub pobiera osobno.
Personalizacja
Jeżeli strona pokazuje różne treści zależnie od użytkownika, języka, lokalizacji lub segmentu, klucz cache musi to uwzględniać.
Tworzenie osobnej wersji dla zbyt wielu wariantów może jednak prowadzić do eksplozji liczby wpisów i niskiej skuteczności pamięci.
Cache busting
Cache busting jest sposobem wymuszenia pobrania nowej wersji pliku przez zmianę jego adresu.
Można dodać:
- numer wersji,
- hash treści,
- parametr zapytania.
Przykład:
style.css?v=2
Lepszym rozwiązaniem dla długiego cache jest często nazwa zawierająca hash:
style.8d7c31.css
Jeżeli zawartość się zmienia, zmienia się także adres. Stara kopia nie blokuje pobrania nowej.
Czyszczenie cache po aktualizacji strony
Po wdrożeniu nowej wersji może być konieczne usunięcie kilku warstw:
- Cache aplikacji lub CMS.
- Cache reverse proxy.
- Cache hostingu.
- Cache CDN.
- Cache przeglądarki testera.
- Cache service workera.
Wyczyszczenie tylko jednej warstwy może nie wystarczyć. Jeżeli CDN nadal przechowuje stary HTML, użytkownik nie zobaczy zmiany mimo opróżnienia cache WordPressa.
Dlaczego strona nadal pokazuje starą wersję
Możliwe przyczyny obejmują:
- lokalny cache przeglądarki,
- CDN,
- cache serwera,
- wtyczkę CMS,
- service worker,
- proxy firmowe,
- niezmieniony adres pliku,
- nieprawidłowe wdrożenie,
- edycję innego środowiska.
Najpierw trzeba ustalić, z której warstwy pochodzi odpowiedź. Narzędzia deweloperskie mogą pokazać nagłówki, wiek zasobu oraz informację, czy plik został pobrany z pamięci.
Jak sprawdzić cache w przeglądarce
W narzędziach deweloperskich można otworzyć zakładkę Network i przeanalizować żądania.
Warto zwrócić uwagę na:
- kod odpowiedzi,
- rozmiar transferu,
- informację „from memory cache”,
- informację „from disk cache”,
- nagłówek Cache-Control,
- ETag,
- Last-Modified,
- Age,
- nagłówki CDN,
- czas odpowiedzi.
Można również tymczasowo zaznaczyć opcję wyłączenia cache podczas otwartych narzędzi deweloperskich.
Nagłówek Age
Nagłówek Age wskazuje, jak długo odpowiedź znajdowała się we współdzielonej pamięci, wyrażone w sekundach.
Może pomóc ustalić, czy zasób został zwrócony przez CDN lub proxy.
Nie każda infrastruktura wysyła ten nagłówek, a jego brak nie oznacza automatycznie, że cache nie działa.
X-Cache i nagłówki dostawców
CDN i systemy proxy mogą dodawać własne nagłówki, takie jak:
X-Cache,CF-Cache-Status,X-Proxy-Cache,Server-Timing.
Wartości takie jak HIT, MISS, BYPASS lub EXPIRED pomagają diagnozować działanie pamięci. Dokładne znaczenie zależy od dostawcy.
Cache a aktualizacje aplikacji
Po aktualizacji programu stare dane mogą nie pasować do nowej struktury. Dobrze zaprojektowana aplikacja powinna rozpoznawać zmianę wersji i migrować albo usuwać niezgodne wpisy.
W przeciwnym razie użytkownik może widzieć błędy, puste ekrany albo nieaktualne elementy.
Wersjonowanie cache
Klucze mogą zawierać numer wersji:
v3:user:123:preferences
Po zmianie formatu aplikacja używa nowego prefiksu i nie odczytuje starych danych.
Cache a backup
Cache nie jest kopią zapasową. Dane w pamięci mogą zostać usunięte w dowolnym momencie, nadpisane albo utracone po restarcie.
Podstawowe informacje powinny znajdować się w trwałym źródle oraz być chronione przez backup.
Jeżeli aplikacja nie potrafi odtworzyć cache na podstawie źródła, oznacza to, że pamięć prawdopodobnie pełni rolę magazynu danych, a nie klasycznego cache.
Cache a RAM
Cache może znajdować się w pamięci RAM, ale te pojęcia nie są tożsame.
RAM jest fizyczną pamięcią roboczą urządzenia. Może przechowywać programy, dane i różne rodzaje pamięci podręcznej.
Cache w RAM jest bardzo szybki, lecz zwykle nietrwały. Po wyłączeniu urządzenia dane znikają.
Cache a dysk SSD
Pamięć podręczna może również działać na dysku. Jest wolniejsza niż RAM, ale ma większą pojemność i może przetrwać restart.
Przeglądarki często wykorzystują zarówno pamięć operacyjną, jak i cache dyskowy.
Czy cache zajmuje miejsce
Tak. Pamięć podręczna zużywa RAM, dysk albo przestrzeń w zewnętrznym systemie.
Zwykle posiada limity. Po ich przekroczeniu starsze lub rzadziej używane elementy są usuwane.
Jeżeli aplikacja nie kontroluje rozmiaru cache, może doprowadzić do braku wolnego miejsca lub nadmiernego zużycia pamięci.
Czy można wyłączyć cache
Technicznie jest to możliwe w wielu systemach, ale zazwyczaj nie jest korzystne dla użytkownika końcowego.
Wyłączanie cache ma sens podczas:
- programowania,
- diagnostyki,
- testowania zmian,
- obsługi szczególnie wrażliwych odpowiedzi,
- pracy z danymi wymagającymi ciągłego odświeżania.
W produkcyjnej witrynie całkowity brak pamięci może zwiększyć koszty i pogorszyć szybkość.
Najczęstsze błędy w konfiguracji cache
Do typowych problemów należą:
- zbyt długi TTL dla dynamicznych danych,
- zbyt krótki TTL dla niezmiennych plików,
- przechowywanie prywatnych odpowiedzi jako publicznych,
- brak automatycznego unieważniania,
- cache’owanie stron koszyka i konta,
- używanie tego samego klucza dla różnych języków,
- brak wersjonowania plików,
- czyszczenie całej pamięci przy każdej zmianie,
- traktowanie cache jako bazy danych,
- brak monitoringu trafień i opóźnień.
Zbyt agresywne cache’owanie
Bardzo długie przechowywanie może prowadzić do pokazywania nieaktualnych cen, dokumentów i informacji.
Zbyt częste czyszczenie
Ciągłe opróżnianie pamięci usuwa korzyści wydajnościowe i powoduje większe obciążenie źródła.
Brak limitów
Cache bez ograniczeń może wykorzystać całą pamięć lub przestrzeń dyskową.
Wspólny cache dla danych prywatnych
To poważny błąd bezpieczeństwa. Każda spersonalizowana odpowiedź wymaga świadomej polityki.
Jak zaplanować dobrą strategię cache
Dobra strategia powinna zaczynać się od klasyfikacji danych.
Warto określić:
- jak często dane się zmieniają,
- ilu użytkowników korzysta z tej samej odpowiedzi,
- ile kosztuje jej wygenerowanie,
- jak poważne są skutki nieaktualności,
- czy zawiera informacje prywatne,
- czy można ją łatwo odtworzyć,
- jak szybko należy reagować na zmianę.
Dane statyczne
Pliki o nazwach zawierających hash mogą być przechowywane bardzo długo.
Dane publiczne i rzadko zmienne
Artykuły oraz strony informacyjne mogą korzystać z cache pełnej strony, z automatycznym czyszczeniem po edycji.
Dane dynamiczne
Ceny, wyniki i stany magazynowe potrzebują krótszego TTL albo aktywnego unieważniania.
Dane prywatne
Powinny być wyłączone ze wspólnych pamięci lub rozdzielone za pomocą bezpiecznych kluczy i właściwych nagłówków.
Monitoring cache
Pamięć powinna być monitorowana tak samo jak baza i serwer.
Ważne wskaźniki to:
- hit ratio,
- liczba missów,
- czas odpowiedzi,
- zużycie pamięci,
- liczba usunięć,
- liczba wygasających kluczy,
- błędy połączenia,
- obciążenie źródła,
- skuteczność unieważniania.
Wysoki hit ratio nie wystarczy, jeżeli użytkownicy otrzymują nieaktualne dane.
Cache a awaria
Aplikacja powinna być przygotowana na niedostępność cache. Jeżeli pamięć jest jedynie warstwą optymalizacyjną, system może pobierać dane bezpośrednio ze źródła, choć wolniej.
Nagły brak pamięci może jednak wywołać ogromne obciążenie bazy. Dlatego po awarii warto stopniowo odbudowywać dane i chronić źródło przed gwałtownym wzrostem ruchu.
Cache jako podstawa wydajnych systemów
Cache jest mechanizmem tymczasowego przechowywania danych, którego celem jest przyspieszenie ponownego dostępu. Występuje w procesorach, systemach operacyjnych, przeglądarkach, aplikacjach, serwerach, bazach danych i sieciach CDN.
Jego działanie opiera się na prostym założeniu: jeżeli wynik kosztownej operacji będzie potrzebny ponownie, warto zachować go bliżej odbiorcy. Pozwala to skrócić czas odpowiedzi, zmniejszyć transfer i ograniczyć obciążenie infrastruktury.
Pamięć podręczna nie jest jednak samodzielnym źródłem prawdy. Dane mogą wygasnąć, zostać usunięte lub utracić zgodność z oryginałem. Najważniejszą częścią strategii jest więc właściwe zarządzanie aktualnością.
W przypadku stron internetowych warto stosować długie przechowywanie wersjonowanych zasobów statycznych, kontrolowane cache’owanie dokumentów HTML oraz ostrożne podejście do treści prywatnych i dynamicznych. Nagłówki HTTP, takie jak Cache-Control, ETag i Last-Modified, pozwalają precyzyjnie określać zachowanie przeglądarek oraz pośrednich serwerów.
Czyszczenie cache jest użytecznym sposobem rozwiązywania części problemów, ale nie powinno być wykonywane rutynowo bez potrzeby. Usunięcie pamięci często powoduje, że aplikacja musi ponownie pobrać i wygenerować zasoby, przez co przez pewien czas może działać wolniej.
Najlepszy cache jest dla użytkownika niemal niewidoczny. Przyspiesza stronę, odciąża system i dostarcza aktualne informacje bez wymagania dodatkowych działań. Źle zaprojektowany prowadzi natomiast do starych danych, trudnych do wykrycia błędów oraz ryzyka ujawnienia informacji.
Skuteczna pamięć podręczna wymaga równowagi pomiędzy szybkością i aktualnością. Nie należy przechowywać wszystkiego przez maksymalnie długi czas ani całkowicie rezygnować z cache w obawie przed nieaktualnymi treściami. Każdy rodzaj danych powinien otrzymać politykę dopasowaną do swojego znaczenia, częstotliwości zmian i wymagań bezpieczeństwa.



Opublikuj komentarz