A cache stores frequently requested results closer to the caller. Cache-aside lets the application read and populate the cache, while write-through updates the cache and database together.
Every cache needs an expiration or invalidation strategy. TTLs limit staleness, while request coalescing, jittered TTLs, and stale-while-revalidate help prevent a cache stampede when many requests rebuild one expired key at once.