Cache (pamięć podręczna) to mechanizm tymczasowego przechowywania danych w miejscu, z którego można je odczytać szybciej niż ze źródła. Idea jest prosta: jeśli coś było kosztowne do policzenia, pobrania albo wczytania, a będziesz tego potrzebować ponownie — zapisz wynik gdzieś bliżej i następnym razem sięgnij po gotowca, zamiast robić całą robotę od nowa.
Jak to działa
Cache działa na zasadzie pytania: „czy mam to już zapisane?”. Jeśli dane są w cache, masz cache hit — odpowiedź wraca błyskawicznie. Jeśli ich nie ma, jest cache miss — system idzie do wolniejszego źródła (bazy danych, dysku, zewnętrznego API), pobiera dane, oddaje ci je i zwykle przy okazji zapisuje w cache na przyszłość. Pamięć podręczna jest celowo mała i szybka, więc nie zmieści wszystkiego — dlatego ma reguły eviction (np. LRU, czyli usuwanie tego, co najdawniej używane) i TTL (time to live), po którym wpis się przeterminowuje.
Cache spotkasz na każdym poziomie: cache CPU (L1/L2/L3), cache dysku, cache przeglądarki, cache DNS, cache zapytań do bazy czy CDN trzymające pliki bliżej użytkownika. Wszystkie robią to samo — skracają drogę do danych.
Przykład z praktyki
Klasyk to Redis jako cache przed bazą danych. Twoja aplikacja, zanim odpyta wolnego PostgreSQL, najpierw sprawdza Redis. Wzorzec cache-aside w pseudokodzie wygląda tak: GET user:42 z Redisa — jeśli pusto, pobierasz z bazy i robisz SET user:42 {...} EX 300, czyli zapisujesz na 300 sekund. Kolejne requesty o tego użytkownika lecą prosto z pamięci i baza ma spokój.
Po stronie frontu zadziała nagłówek HTTP Cache-Control: max-age=3600 na statycznych plikach — przeglądarka trzyma je lokalnie przez godzinę i nie pobiera CSS-a przy każdym przeładowaniu.
Częste błędy i pułapki
Najgorszy scenariusz to stale cache — użytkownik widzi stare dane, bo zapomniałeś unieważnić wpis po zmianie. Stąd słynny żart Phila Karltona: w informatyce są tylko dwie trudne rzeczy — unieważnianie cache i nazywanie zmiennych. Uważaj też na cache stampede: gdy popularny wpis wygaśnie, setki requestów naraz walą do bazy. I pamiętaj — cache to optymalizacja, nie źródło prawdy. Nigdy nie trzymaj tam czegoś, czego nie da się odtworzyć ze źródła.
Pojęcia powiązane
TTL, cache invalidation, cache hit/miss, LRU, CDN, Redis, Memcached, ETag, Cache-Control, memoizacja.