Explain caching strategies and common failure modes.
Strategies:
- Cache-aside (lazy loading): app checks cache, on miss reads DB and populates. Most common.
- Read-through: cache library fetches on miss.
- Write-through: write to cache and DB together for consistency.
- Write-behind: write to cache, flush to DB asynchronously for throughput with some durability risk.
Eviction: LRU/LFU/TTL. Place caches at multiple layers: client, CDN, application (Redis/Memcached), and database.
Failure modes:
- Stampede/thundering herd: many requests miss the same key; use locks, single-flight or jittered TTLs.
- Cache penetration: repeated misses for non-existent keys; cache negatives or use a bloom filter.
- Stale data: invalidation is hard; set TTLs, publish invalidation events, or version keys.
- Hot key overload: shard or replicate the key.