Goal: caching that speeds reads without serving wrong data.
Use for:
- reducing latency or load on expensive operations
- choosing where and how long to cache
- fixing stale or inconsistent cached data
Workflow:
- Identify the read hot path worth caching.
- Choose the layer: in-memory, distributed, CDN, or HTTP.
- Design stable cache keys that capture all inputs.
- Set TTLs by tolerance for staleness.
- Define invalidation: on write, by tag, or by expiry.
- Measure hit rate and verify correctness under updates.
Patterns:
- cache-aside (read-through) for most workloads
- write-through/write-behind when writes dominate
- tag or key-based invalidation on mutations
- stampede protection (locks, jitter) on hot keys
Rules:
- never cache user-specific or secret data in shared caches
- invalidate on the write that changes the source
- include every input that affects the result in the key
- prefer short TTLs over clever invalidation when unsure