Tiered Cache
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:
| Topology | Free? | Upper-Tier Hubs | Origin Requests | Best For |
|---|---|---|---|---|
| Generic | ✅ | Fixed set of well-connected hubs | Greatly reduced | Most sites — solid all-around |
| Smart | 💰 Pro+ | Cloudflare selects the optimal hub based on real-time performance | Minimised | High-traffic, performance-critical sites |
| Custom | 💰 Enterprise | You specify which PoPs are upper-tier hubs | Fully controlled | Multi-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.
| Metric | Without Tiered Cache | With Generic Tiered Cache | With Smart Tiered Cache |
|---|---|---|---|
| Origin requests per unique URL | Up to 330+ (one per PoP on first miss) | Reduced to ~15–20 (one per hub) | Reduced to ~3–5 (optimal hubs) |
| Cache HIT ratio improvement | Baseline | +10 to +30% typical | +20 to +50% typical |
| Origin shielding | None | Partial | Strong |
| Cold-start origin load | High — many PoPs miss at once | Low — most misses absorbed by hubs | Very low |
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
- Go to your Cloudflare Dashboard → your domain
- Click Caching → Tiered Cache
Step 2: Select a Topology
| Setting | Action |
|---|---|
| No tiered caching | Off — 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.
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.
# 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:
| Feature | What It Controls |
|---|---|
| Cache Rules | Whether content is cached and for how long (Edge TTL) |
| Tiered Cache | How 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:
| Feature | Problem It Solves | Layer | Free? |
|---|---|---|---|
| Tiered Cache | Reduces origin requests for popular content | In-memory CDN caching hierarchy | ✅ Generic is free |
| Cache Reserve | Prevents cache eviction for infrequently accessed content | Persistent 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.
| Configuration | Origin Requests in First 2 Hours |
|---|---|
| No caching | 50,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 This | Do This Instead |
|---|---|
| Leave Tiered Cache disabled indefinitely | Enable Generic immediately — it's free and has no downside |
| Assume Tiered Cache will cache uncacheable content | Tiered 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 enabling | Verify origin request reduction in Analytics → Cache to confirm the feature is working |
| Use Tiered Cache alone without Cache Rules for HTML | Tiered 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
- Continue to Cache Reserve to learn how R2-backed persistent caching eliminates long-tail evictions.
- Or skip ahead to DDoS Protection.