Cachování
Také známo jako Cache, Mezipaměť, Memoizace
Stručně
Uložení drahého výsledku, aby další požadavek stál skoro nic — silné a snadno nenápadně špatné.
Cachování znamená spočítat něco jednou a servírovat uloženou kopii, dokud není neplatná. Je ve vrstvách: prohlížeč, CDN, paměť aplikace nebo Redis a samotná databáze. Každá vrstva je kopie, která může být špatná, takže otázka není jen „jak to zacachuju“, ale „jak poznám, kdy kopii zahodit“.
Dva těžké problémy
Invalidace: změní se cena produktu a cache dvacet minut ukazuje starou. Řešte to klíči, které umíte spočítat, ne uhodnout — cachujte podle ID produktu a verze a při změně dat verzi zvyšte. Časová expirace (TTL) je záchranná síť, ne plán.
Pojmenování: klíče, které kolidují, nebo jsou moc hrubé. Klíč „homepage“ znamená jednu položku pro všechny uživatele, jazyky a měny. „homepage:cs:CZ:anon“ znamená přesně to, co potřebujete. Klíč spočítejte v jedné funkci a používejte ji všude, jinak se rozuteče.
Kdy cache schová chybu
Když je stránka pomalá kvůli N+1 dotazům, cachování výsledku ji udělá rychlou, dokud se data nezmění — pak je zase pomalá a pomalá cesta zmizela ze zorného pole. Zacachovaný desetisekundový dotaz vypadá ve vývoji jako odpověď za 20 ms a po nasazení jako timeout za 10 sekund. Nejdřív opravte dotaz, cachujte potom.
Cache taky schová rozbitou invalidaci. Fronta zastaralých cen není výkonnostní zisk, ale datová chyba, která čeká na den s provozem. A nemá smysl cachovat jeden dotaz na stránce, která se spustí dvakrát denně — složitost přežije úsporu.
Zdroje
Související pojmy
CDN
Síť edge serverů, které servírují vaše soubory blízko uživatele — rozhodují cache hlavičky, purge když je potřeba.
Problém N+1 dotazů
Jeden dotaz na seznam plus jeden na každý řádek: rychlé s 10 řádky ve vývoji, smrtelné s 500 v produkci.
Výkonnostní rozpočet
Tvrdý limit váhy stránky, JavaScriptu nebo času načtení, který hlídá CI, aby web nezpomaloval po jedné funkci.