Comparisons

Ten pairs that get conflated in real conversations. Neither column wins — what decides is the requirement. Each record leads with the confusion, because the confusion is the reason the record exists.

Local (in-process) vs Distributed cache

What people get wrong about this pair

They are treated as the same idea with different storage. They have different correctness properties: a local cache has as many versions of the truth as you have instances, and invalidating it means broadcasting to every process. Also, no cache is a default requirement — plenty of backends are correct and fast without one.

In-process cache
Use it when

Small, hot, rarely-changing data where per-instance staleness is acceptable — config, feature flags, reference lookups.

Shared cache (e.g. a Redis or Memcached tier)
Use it when

Data that must be consistent across instances, is too big to hold per instance, or must survive a deploy.

DimensionIn-process cacheShared cache (e.g. a Redis or Memcached tier)
Read costA memory accessA network round trip
Consistency across instancesNone — N independent copiesOne shared value
InvalidationNeeds a broadcast or a short TTLDelete the key
Survives deployNo — cold start every releaseYes
CapacityBounded by process memory; unbounded means a leakBounded by the tier, with an eviction policy
New failure modeDivergent answers between instancesA dependency that can be down or slow