Know-How
Caching Strategie
Cache je nejefektivnější způsob zrychlení aplikace. Ale špatná cache invalidace je jeden z nejtěžších problémů v CS.
Strategie
- Cache-aside: Aplikace čte/zapisuje cache explicitně
- Write-through: Zápis do cache i DB současně
- Write-behind: Zápis do cache, async do DB
- Read-through: Cache automaticky načte z DB
HTTP Cache headers
# Statické assety — dlouhý cache
Cache-Control: public, max-age=31536000, immutable
# API response — krátký cache
Cache-Control: private, max-age=60
# Validace s ETag
ETag: "abc123"
If-None-Match: "abc123" # 304 Not Modified
Cache-aside pattern
async def get_product(product_id):
# 1. Check cache
cached = await redis.get(f"product:{product_id}")
if cached:
return json.loads(cached)
# 2. Cache miss — fetch from DB
product = await db.products.find(product_id)
# 3. Store in cache
await redis.setex(f"product:{product_id}", 3600, json.dumps(product))
return product
Klíčový takeaway
Cache-aside pro většinu use cases. HTTP cache headers pro CDN. Invalidace je těžší než se zdá — TTL je nejjednodušší.