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.