Skip to main content

Tiered Cache

Learning Focus

By the end of this lesson you will understand how Tiered Cache introduces a second layer of caching between edge PoPs and your origin, why it increases cache HIT ratios, and how to enable and choose a topology — including the free Generic option.

The Problem with Flat CDN Caching

In a standard CDN setup, every Cloudflare PoP (Point of Presence) across 330+ cities has its own independent cache. When a resource is requested for the first time in a new PoP — regardless of whether another PoP across the globe already has it — that PoP must go all the way back to your origin to fetch it.

Consider a scenario: you run a site with 50,000 monthly visitors spread across 40 different countries. A new blog post goes live. The first visitor in each city causes a cache MISS — meaning 40 separate requests hit your origin in the first few minutes alone, even though they all want the same content.

This is the cold-start problem in flat CDN caching, and Tiered Cache solves it.

flowchart TD
subgraph Flat["Without Tiered Cache (Flat)"]
F_US["US PoP"] -->|"Cache MISS\n(Origin request)"| F_O["Origin Server"]
F_EU["EU PoP"] -->|"Cache MISS\n(Origin request)"| F_O
F_AS["Asia PoP"] -->|"Cache MISS\n(Origin request)"| F_O
F_AU["Australia PoP"] -->|"Cache MISS\n(Origin request)"| F_O
end

subgraph Tiered["With Tiered Cache"]
T_US["US PoP"] -->|"Cache MISS"| T_HUB["Upper-Tier Hub PoP\n(Cached ✅)"]
T_EU["EU PoP"] -->|"Cache MISS"| T_HUB
T_AS["Asia PoP"] -->|"Cache MISS"| T_HUB
T_AU["Australia PoP"] -->|"Cache MISS"| T_HUB
T_HUB -->|"1 origin request\n(on first MISS only)"| T_O["Origin Server"]
end

style F_O fill:#dc2626,color:#fff,stroke:#b91c1c
style T_HUB fill:#f6821f,color:#fff,stroke:#e5711e
style T_O fill:#16a34a,color:#fff,stroke:#15803d

Without Tiered Cache: 4 PoPs × 1 cache miss each = 4 origin requests

With Tiered Cache: 4 PoPs hit the upper-tier hub → hub checks its cache → 1 origin request (only if the hub itself doesn't have it)

What Is Tiered Cache?

Tiered Cache introduces a two-layer hierarchy to Cloudflare's caching system:

  • Lower-Tier PoPs (Edge) — The 330+ data centres closest to users. They serve cached content instantly.
  • Upper-Tier PoPs (Hubs) — A smaller set of regional hubs that sit between edge PoPs and your origin. When a lower-tier PoP misses, it first checks the nearest upper-tier hub before asking your origin.

Think of it like a distribution supply chain:

A supermarket chain (lower-tier PoPs) doesn't order every item directly from the farm (origin) every time stock runs low. They order from a regional warehouse (upper-tier hub), which talks to the farm far less frequently. The farm is shielded from thousands of individual store orders.

flowchart LR
ORIGIN["Your Origin\n(Shielded)"]
subgraph Upper["Upper Tier (Hubs)"]
HUB_US["US Hub"]
HUB_EU["EU Hub"]
HUB_AS["Asia Hub"]
end
subgraph Lower["Lower Tier (Edge PoPs)"]
P1["NYC PoP"]
P2["LAX PoP"]
P3["AMS PoP"]
P4["FRA PoP"]
P5["SIN PoP"]
P6["NRT PoP"]
end

P1 & P2 --> HUB_US --> ORIGIN
P3 & P4 --> HUB_EU --> ORIGIN
P5 & P6 --> HUB_AS --> ORIGIN

style ORIGIN fill:#6b7280,color:#fff,stroke:#4b5563
style HUB_US fill:#f6821f,color:#fff,stroke:#e5711e
style HUB_EU fill:#f6821f,color:#fff,stroke:#e5711e
style HUB_AS fill:#f6821f,color:#fff,stroke:#e5711e

Tiered Cache Topologies

Cloudflare offers three topology options, each with different trade-offs between origin protection and latency for upper-tier misses:

TopologyFree?Upper-Tier HubsOrigin RequestsBest For
GenericFixed set of well-connected hubsGreatly reducedMost sites — solid all-around
Smart💰 Pro+Cloudflare selects the optimal hub based on real-time performanceMinimisedHigh-traffic, performance-critical sites
Custom💰 EnterpriseYou specify which PoPs are upper-tier hubsFully controlledMulti-CDN, compliance, or latency SLA requirements

Generic Topology (Free)

Generic Tiered Cache uses a fixed, globally well-connected set of upper-tier hubs. Cloudflare pre-selected these hubs based on their network position and bandwidth — they are major internet exchange points.

While you don't get the adaptive optimisation of Smart topology, Generic still delivers significant reductions in origin requests for most sites.

Smart Tiered Cache (Pro+)

Smart Tiered Cache uses latency measurement data collected from Cloudflare's network to dynamically choose the upper-tier hub that is closest to your origin for each lower-tier PoP. The "smart" part is that the hub selection is:

  • Per-origin (different origins can have different optimal hubs)
  • Dynamic (changes as network conditions shift)
  • Latency-optimised (minimises the time from hub → origin on a cache miss)

This combination means fewer, faster origin requests compared to Generic topology.

Cache HIT Ratio: What to Expect

Enabling Tiered Cache does not change what gets cached — it changes how many times your origin is called for the same content.

MetricWithout Tiered CacheWith Generic Tiered CacheWith Smart Tiered Cache
Origin requests per unique URLUp to 330+ (one per PoP on first miss)Reduced to ~15–20 (one per hub)Reduced to ~3–5 (optimal hubs)
Cache HIT ratio improvementBaseline+10 to +30% typical+20 to +50% typical
Origin shieldingNonePartialStrong
Cold-start origin loadHigh — many PoPs miss at onceLow — most misses absorbed by hubsVery low
info

The improvement depends heavily on your content's geographic popularity. A site with a global audience benefits far more from Tiered Cache than a site whose traffic is concentrated in a single region (where most requests hit the same 2–3 PoPs anyway).

Enabling Tiered Cache

Step 1: Navigate to Tiered Cache Settings

  1. Go to your Cloudflare Dashboard → your domain
  2. Click Caching → Tiered Cache

Step 2: Select a Topology

SettingAction
No tiered cachingOff — flat CDN, all misses go to origin
Generic (free)Enable a fixed set of upper-tier hubs
Smart (Pro+)Enable Cloudflare's dynamic hub selection

Select Generic and click Save — that's all that's required. The change propagates across the network within seconds.

tip

There is no reason not to enable Generic Tiered Cache on the free plan. It has no downside — it only reduces origin load and improves HIT ratios. Enable it the moment you first set up a zone.

Step 3: Verify it Works

After enabling, check the cf-cache-status header on repeated requests from different geographic locations. You should see more HIT responses compared to before, and fewer direct origin requests in your server access logs.

Check cache status from multiple regions (using curl)
# From US
curl -sI https://example.com/style.css | grep cf-cache-status

# Using an online tool like https://check-host.net or similar
# Request from EU, Asia, and AU and observe the HIT ratio increase

You can also verify in Cloudflare's Analytics → Cache tab — look for a drop in the "Uncached" traffic metric after enabling.

How Tiered Cache Interacts with Cache Rules

Tiered Cache and Cache Rules are complementary — they work at different layers of the stack:

FeatureWhat It Controls
Cache RulesWhether content is cached and for how long (Edge TTL)
Tiered CacheHow many times the origin is called when the edge misses

A Cache Rule with Edge TTL: 1 hour tells the edge to hold content for 1 hour. Tiered Cache ensures that during that 1 hour, the origin is called at most once across all PoPs in a region — not once per PoP.

sequenceDiagram
participant NY as NYC PoP (miss)
participant LA as LAX PoP (miss)
participant HUB as US Hub
participant ORI as Origin

NY->>HUB: Cache MISS — do you have /blog/post?
HUB->>ORI: Cache MISS — fetch /blog/post
ORI-->>HUB: 200 OK (content)
HUB-->>NY: 200 OK (now cached at hub)

LA->>HUB: Cache MISS — do you have /blog/post?
HUB-->>LA: 200 OK (HIT from hub — origin NOT called)

Tiered Cache and Cache Purging

When you purge a URL or purge everything, Tiered Cache purges propagate correctly through the hierarchy. You do not need to do anything special — a purge from the dashboard or API clears both lower-tier and upper-tier caches.

However, be aware that with Tiered Cache:

  • A purge of a URL triggers a re-fetch from origin once (at the hub level) rather than up to once per PoP.
  • This means after a purge, your origin gets even fewer cold-start requests compared to a flat CDN purge.

Tiered Cache vs Cache Reserve

These two features are often confused. They address different problems:

FeatureProblem It SolvesLayerFree?
Tiered CacheReduces origin requests for popular contentIn-memory CDN caching hierarchy✅ Generic is free
Cache ReservePrevents cache eviction for infrequently accessed contentPersistent R2-backed cache layer💰 Paid

Together: Tiered Cache makes popular content faster (fewer origin hits); Cache Reserve makes rare content more available (fewer evictions of long-tail objects). They are complementary, not competing features.

Real-World Impact: A Worked Example

Scenario: A media site publishes a news article. The article gets 50,000 views in 2 hours from users in 60 countries.

ConfigurationOrigin Requests in First 2 Hours
No caching50,000 (every user hits origin)
CDN, no tiering~60 (first user per PoP per city)
CDN + Generic Tiered Cache~10–15 (first miss per regional hub)
CDN + Smart Tiered Cache~3–5 (1 per optimal hub path)

For an article that takes 200ms of database time to generate, Smart Tiered Cache saves ~10,000ms of aggregate database time vs. flat CDN — and essentially nothing vs. un-cached.

Common Misconceptions

"Tiered Cache is only useful for huge sites"

Reality: Even small sites benefit. If you have visitors from multiple continents, Tiered Cache stops each new regional PoP from calling your origin independently. A site with just 1,000 daily visitors, half in Europe and half in Asia, would see measurable origin load reduction.

"Enabling Tiered Cache slows down cache misses"

Reality: When a lower-tier PoP misses, it queries the upper-tier hub — which is another Cloudflare data centre with an extremely fast, low-latency private network connection (not the public internet). The hub→PoP hop typically adds 1–5ms — negligible compared to the 100–300ms round-trip to most origin servers.

"Tiered Cache conflicts with my Cache Rules"

Reality: Cache Rules define eligibility and TTL; Tiered Cache defines the lookup path. They operate independently and compose correctly. Cache Rules run first to determine if the content is cacheable; if it is, Tiered Cache ensures the origin is consulted as infrequently as possible.

"I need to purge both tiers separately when I update content"

Reality: A single purge operation from the dashboard or API automatically propagates through both the lower-tier PoPs and the upper-tier hubs. No extra steps required.

Anti-Patterns to Avoid

Don't Do ThisDo This Instead
Leave Tiered Cache disabled indefinitelyEnable Generic immediately — it's free and has no downside
Assume Tiered Cache will cache uncacheable contentTiered Cache only helps content that is already eligible for cache — set Cache Rules for HTML if needed
Mix Tiered Cache with short Edge TTLs (<1 min)Use Tiered Cache with Edge TTLs of at least 5 minutes to make the hub layer meaningful
Forget to check Analytics after enablingVerify origin request reduction in Analytics → Cache to confirm the feature is working
Use Tiered Cache alone without Cache Rules for HTMLTiered Cache doesn't help HTML pages that aren't being cached — combine both

Key Takeaways

  • Tiered Cache inserts regional hub PoPs between edge PoPs and your origin — reducing origin requests dramatically.
  • Generic topology is free — enable it immediately on every zone. There is no downside.
  • Smart topology (Pro+) adds dynamic, latency-optimised hub selection for higher hit ratios on global traffic.
  • Tiered Cache is complementary to Cache Rules — rules define eligibility, tiering reduces origin calls.
  • Tiered Cache is not the same as Cache Reserve — one is a hierarchy of in-memory caches; the other is a persistent R2-backed layer.
  • A single cache purge propagates through both tiers automatically — no extra steps needed.
  • Real-world impact: 50,000 views from 60 countries generates ~60 origin requests (flat CDN) vs ~3–15 origin requests (with Tiered Cache).

What's Next