Cache Miss Types
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.
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
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