Kešování (z anglického caching) je technika, která zlepšuje výkon a efektivitu systémů tím, že ukládá kopie často používaných dat v dočasné úložné paměti, nazývané cache (čti keš). Kešování může výrazně zrychlit přístup k datům, snížit zatížení serverů a zlepšit uživatelskou zkušenost.
Prohlížečové kešování ukládá kopie webových stránek, obrázků, skriptů a dalších zdrojů do paměti prohlížeče na straně klienta. Když uživatel navštíví stejnou stránku znovu, prohlížeč může načíst zdroje z cache místo toho, aby je znovu stahoval ze serveru.
HTTP hlavičky, jako jsou Cache-Control
, Expires
a ETag
, se používají k řízení chování kešování v prohlížeči.
Cache-Control: max-age=3600
Expires: Wed, 21 Oct 2023 07:28:00 GMT
ETag: "5d8c72a5edda1"
Serverové kešování ukládá dynamicky generované stránky nebo jejich části na straně serveru. To umožňuje rychlejší odpovědi na požadavky, aniž by se musely znovu provádět náročné operace, jako jsou dotazy na databázi nebo výpočty.
Content Delivery Network (CDN) kešování ukládá obsah na geograficky distribuovaných serverech, což zlepšuje dostupnost a rychlost načítání webových stránek pro uživatele po celém světě. CDN servery ukládají statické soubory, jako jsou obrázky, videa, styly a skripty, a poskytují je uživatelům z nejbližšího serveru.
Databázové kešování ukládá výsledky databázových dotazů do cache, což snižuje počet opakovaných dotazů na databázi a zlepšuje výkon aplikace. Tato technika je zvláště užitečná pro často opakované a náročné dotazy.
Kešování může být implementováno na několika úrovních webových aplikací, včetně prohlížeče, aplikačního serveru a databáze. Pro webové aplikace postavené na frameworku, jako je Django, Ruby on Rails nebo Laravel, existují integrované nástroje a knihovny pro kešování.
V Django lze nastavit kešování pomocí cache
middleware a konfiguračních nastavení.
# settings.py
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
# Použití kešování v pohledu
from django.core.cache import cache
def my_view(request):
data = cache.get('my_key')
if not data:
data = heavy_computation()
cache.set('my_key', data, 3600)
return HttpResponse(data)
Pro API kešování se často používají reverzní proxy servery, jako je Varnish nebo Nginx, které ukládají odpovědi na API požadavky a vracejí je přímo z cache, aniž by zatěžovaly aplikační server.
server {
location /api/ {
proxy_pass http://backend_server;
proxy_cache my_cache;
proxy_cache_valid 200 10m;
}
}
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m;
Kešování je klíčová technika pro zlepšení výkonu a efektivity webových aplikací a systémů. Správná implementace kešování může výrazně zrychlit načítání stránek, snížit zatížení serverů a zlepšit celkovou uživatelskou zkušenost. Přestože implementace a správa kešování může být složitá, výhody výrazně převažují nad nevýhodami. Využití vhodných nástrojů a strategií pro kešování může přinést významné zlepšení výkonu vašich aplikací a systémů.