/kæʃ/kešTakékeš, cachováníPokročilý
Definice
Cache je mezipaměť, do které se ukládá výsledek náročné operace, aby se při dalším stejném dotazu nemusel počítat znovu. Vyměňuje čerstvost dat za rychlost a téměř vždycky přináší otázku, kdy uloženou hodnotu zahodit.
Proč cache existuje
Některé operace jsou drahé: dotaz do databáze přes půl světa, vygenerování obrázku, výpočet ceny košíku. Pokud se stejný výsledek žádá opakovaně, je levnější si ho jednou spočítat a pak už jen podávat.
Kde vzniká problém
Cache je vždycky kopie. V okamžiku, kdy se originál změní, začne kopie lhát. Celá disciplína kolem cachování se proto netočí kolem ukládání, ale kolem invalidace: kdy uloženou hodnotu prohlásit za neplatnou.
Praktické řešení bývá kombinace časové platnosti a cíleného zneplatnění při zápisu.
Příklady z praxe
HTTP cache v prohlížeči
Server pošle u obrázku hlavičku Cache-Control s roční platností a do názvu souboru zahrne otisk obsahu. Prohlížeč pak obrázek nikdy nestahuje znovu, a když se obrázek změní, změní se i název souboru a stáhne se jako nový.
Cache-Control: public, max-age=31536000, immutable
Časté omyly
- MýtusCache vždycky zrychlí aplikaci.
- Ve skutečnostiJen tehdy, když se stejná data žádají opakovaně. U dat, která se čtou jednou a pak už nikdy, cache jen přidá režii navíc a zabere paměť. Nízká úspěšnost cache umí být pomalejší než žádná cache.
- MýtusStačí nastavit delší dobu platnosti a je hotovo.
- Ve skutečnostiDelší platnost znamená vyšší úspěšnost, ale také delší dobu, po kterou uživatelé vidí zastaralá data. Rozumné nastavení vychází z toho, jak často se data mění a jak moc vadí, když jsou chvíli stará.
Časté dotazy
- Jaký je rozdíl mezi cache a databází?
- Databáze je zdroj pravdy: co je v ní, to platí. Cache je odvozená kopie, kterou je možné kdykoli zahodit, aniž by se cokoli ztratilo. Pokud by smazání cache znamenalo ztrátu dat, není to cache, ale úložiště.
Zdroje
- HTTP caching(otevře se v novém okně)
- RFC 9111: HTTP Caching(otevře se v novém okně)