Cache Miss Types

Caching

Cold miss: First ever request (unavoidable). Capacity miss: Evicted due to full cache. Invalidation miss: Purged or expired. Fragmentation miss: Cached elsewhere, not in this PoP.

Updated Apr 3, 2026

Full Explanation

Cold miss (compulsory miss): The very first request for a piece of content at a particular cache node. The cache has never seen this URL before, so it has to fetch from the origin. Cold misses are unavoidable for genuinely new content, but you can reduce them with cache warming, where you proactively push popular content to edge caches before users request it. After a PoP restart or a new PoP deployment, every request is a cold miss until the cache fills up.

Capacity miss: The content was previously cached but got evicted because the cache ran out of space. Cache nodes have finite storage, and when they fill up, eviction algorithms (LRU, LFU, or variants) decide what to throw away. If your cache hit ratio suddenly drops while traffic is steady, capacity misses are a likely culprit. The fix is either bigger cache storage, smarter eviction policies, or reducing the variety of cached content (fewer cache key variants).

Invalidation miss: The content was cached but has been explicitly purged or its TTL (Time to Live) expired. This is by design when you are actively managing cache freshness. If you deploy a new version of your CSS and purge the old one, the next request is an invalidation miss. Setting appropriate TTLs is a balancing act: too short and you get too many invalidation misses, too long and users see stale content.

Fragmentation miss: The content exists somewhere in the CDN but not at the PoP handling this particular request. A user in Frankfurt requests an image that is only cached at the London PoP. The Frankfurt PoP has a cache miss even though the CDN "has" the content. Origin shield (a mid-tier cache that all PoPs check before going to origin) and cache warming across multiple PoPs help reduce fragmentation misses. Understanding which type of miss is hurting your hit ratio tells you exactly what to fix: cold misses need warming, capacity misses need bigger caches, invalidation misses need TTL tuning, and fragmentation misses need origin shield or multi-PoP warming.

Interactive Animation

Loading animation...

Examples

Diagnosing miss types using CDN response headers:

# Check cache status headers to identify miss types
curl -sI https://cdn.example.com/style.css | grep -i x-cache
# X-Cache: MISS    (could be any type)
# X-Cache: HIT     (content was cached at this PoP)

# After a purge (invalidation miss)
curl -sI https://cdn.example.com/style.css
# X-Cache: MISS
# Age: 0           (freshly fetched)

# After cache fills up again (subsequent request)
curl -sI https://cdn.example.com/style.css
# X-Cache: HIT
# Age: 45          (cached 45 seconds ago)
Miss Type         Cause                    Fix
Cold              Never cached here         Cache warming, pre-fetching
Capacity          Cache full, evicted       Bigger cache, better eviction
Invalidation      TTL expired or purged     Tune TTLs, stale-while-revalidate
Fragmentation     Cached at wrong PoP       Origin shield, multi-PoP warming

Frequently Asked Questions

Cold miss: First ever request (unavoidable). Capacity miss: Evicted due to full cache. Invalidation miss: Purged or expired. Fragmentation miss: Cached elsewhere, not in this PoP.

Diagnosing miss types using CDN response headers:

# Check cache status headers to identify miss types
curl -sI https://cdn.example.com/style.css | grep -i x-cache
# X-Cache: MISS    (could be any type)
# X-Cache: HIT     (content was cached at this PoP)

# After a purge (invalidation miss)
curl -sI https://cdn.example.com/style.css
# X-Cache: MISS
# Age: 0           (freshly fetched)

# After cache fills up again (subsequent request)
curl -sI https://cdn.example.com/style.css
# X-Cache: HIT
# Age: 45          (cached 45 seconds ago)
Miss Type         Cause                    Fix
Cold              Never cached here         Cache warming, pre-fetching
Capacity          Cache full, evicted       Bigger cache, better eviction
Invalidation      TTL expired or purged     Tune TTLs, stale-while-revalidate
Fragmentation     Cached at wrong PoP       Origin shield, multi-PoP warming