advanced
Backend-кэширование
Кэшируйте дорогие чтения или вычисления с явными keys, invalidation, TTL, защитой от stampede и ожиданиями consistency.
Backend cache хранит дорогие результаты чтения или вычислений — часто Redis или in-process LRU — с явными keys, TTL, invalidation и защитой от stampede.
| Паттерн | Когда | |---------|-------| | Cache-aside | App читает cache, при miss — БД и set key | | Write-through | Write обновляет cache и БД вместе | | TTL | Допустима кратковременная устарелость | | Singleflight | Много miss на hot key схлопываются в один rebuild |
const cached = await redis.get(key);
if (cached) return JSON.parse(cached);
const fresh = await loadFromDb(id);
await redis.setex(key, 60, JSON.stringify(fresh));
Задайте ожидания **consistency**: можно ли 30s stale inventory? Invalidate при write, меняющем authoritative data. Мониторьте hit rate, eviction, memory.
На интервью: cache stampede; thundering herd; cache персональных данных; когда хватит CDN vs Redis.
Типовые ошибки: нет invalidation при update; cache ошибок; неограниченный in-process cache на multi-tenant keys.
Компромисс — скорость и разгрузка БД против багов устарелости и операционной сложности.
Чеклист:
- TTL и invalidation per key pattern.
- Singleflight на hot keys.
- Не кэшировать секреты в shared keys.
- Алерт на обвал hit rate.