Cache Reserve is a large, persistent data store implemented on top of R2. By pushing a single button in the dashboard, your website’s cacheable content will be written to Cache Reserve. In the same way that Tiered Cache builds a hierarchy of caches between your visitors and your origin, Cache Reserve serves as the ultimate upper-tier cache that will reserve storage space for your assets for as long as you want. This ensures that your content is served from cache longer, shielding your origin from unneeded egress fees.
How long content in Cache Reserve will be considered “fresh” is determined by Edge Cache TTL setting or Cache-Control headers at your origin, if Edge Cache TTL is not set. After freshness expires, Cloudflare will attempt to revalidate the asset when a subsequent request arrives in Cache Reserve for the asset. This is the same behavior as in Cloudflare’s regular CDN.
The retention period of an asset is how long we will keep the asset in Cache Reserve before marking it for eviction. If an asset is not requested within the retention period, it will be evicted from Cache Reserve. Accessing the asset will extend the retention period by one period. By default, the Cache Reserve retention period is 30 days.
Assets must meet certain criteria to use Cache Reserve.
Cache Reserve is a usage-based product and pricing is detailed below. While Cache Reserve does require a paid plan, users can continue to use Cloudflare’s CDN (without Cache Reserve) for free.
Enable Cache Reserve
You can enable Cache Reserve from the dashboard or via API. In both situations, you need a paid Cache Reserve Plan.
To enable Cache Reserve through the dashboard:
- Log in to the Cloudflare dashboard and select a domain.
- Go to Caching > Cache Reserve.
- Select Enable storage sync.
If you are an Enterprise customer and are interested in Cache Reserve, contact your account team to get help with your configuration.
Cache Reserve asset eligibility
Not all assets are eligible for Cache Reserve. To be admitted into Cache Reserve, assets must:
- Be cacheable, according to Cloudflare’s standard cacheability factors,
- Have a freshness time-to-live (TTL) of at least 10 hours (set by any means such as Cache-Control / CDN-Cache-Control origin response headers, Edge Cache TTL, Cache TTL By Status, or Cache Rules),
- Have a Content-Length response header.
- When using Image Resizing, original files are eligible for Cache Reserve, but resized file variants are not eligible because Image Resizing happens after Cache Reserve in the response flow.
- Cache Reserve file limits are the same as R2 limits. Note that CDN cache limits still apply. Assets larger than standard limits will not be stored in the standard CDN cache, so these assets will incur Cache Reserve operations costs far more frequently.
- Origin Range requests are not supported at this time from Cache Reserve.
- Vary for Images is currently not compatible with Cache Reserve.
- Requests to R2 public buckets linked to a zone’s domain will not use Cache Reserve. Enabling Cache Reserve for the connected zone will use Cache Reserve only for requests not destined for the R2 bucket.
- Cache Reserve makes requests for uncompressed content directly from the origin. Unlike the standard Cloudflare CDN, Cache Reserve does not include the
Accept-Encoding: gzipheader when sending requests to the origin.
Like the standard CDN, Cache Reserve also uses the
cf-cache-status header to indicate cache statuses like
REVALIDATED. Cache Reserve cache misses and hits are factored into the dashboard’s cache hit ratio.
Individual sampled requests that filled or were served by Cache Reserve are viewable via the CacheReserveUsed Logpush field.
Cache Reserve monthly operations and storage usage are viewable in the dashboard.
Cache Reserve charges based on the total volume of data stored, along with two classes of operations on that data:
- Class A operations which are more expensive and tend to mutate state.
- Class B operations which tend to read existing state.
In most cases, a Cache Reserve miss will result in both one class A and one class B operation, and a Cache Reserve hit will result in one class B operation. Assets larger than 1 GB will incur more operations proportional to their size.
Cache Reserve pricing
|Storage||$0.015 / GB-month|
|Class A Operations (writes)||$4.50 / million requests|
|Class B Operations (reads)||$0.36 / million requests|
Storage is billed using gigabyte-month (GB-month) as the billing metric. A GB-month is calculated by recording total bytes stored for the duration of the month.
- Storing 1 GB for 30 days will be charged as 1 GB-month.
- Storing 2 GB for 15 days will be charged as 1 GB-month.
Operations are performed by Cache Reserve on behalf of the user to write data from the origin to Cache Reserve and to pass that data downstream to other parts of Cloudflare’s network. These operations are managed internally by Cloudflare.
Class A operations (writes)
Class A operations are performed based on cache misses from Cloudflare’s CDN. When a request cannot be served from cache, it will be fetched from the origin and written to cache reserve as well as our edge caches on the way back to the visitor.
Class B operations (reads)
Class B operations are performed when data needs to be fetched from Cache Reserve to respond to a miss in the edge cache.
Asset purges are free operations.
Cache Reserve will also be purged along with edge cache when you send a purge by URL request.
Other purge methods, such as purge by tag, host, prefix, or purge everything will force an attempt to revalidate on the subsequent request for the Cache Reserve asset. Note that assets purged this way will still incur storage costs until their retention TTL expires.
Cache Reserve billing examples
Assuming 1,000 assets (each 1 GB) are written to Cache Reserve at the start of the month and each asset is read 1,000 times, the estimated cost for the month would be:
|Class B Operations||(1,000 assets) * (1,000 reads per asset)||1,000,000||$0.36|
|Class A Operations||(1,000 assets) * (1 write per asset)||1,000||$4.50|
|Storage||(1,000 assets) * (1GB per asset)||1,000 GB-months||$15.00|
(Note the billable quantity is rounded up to the nearest million.)
Assuming 1,000,000 assets (each 1 MB) are in Cache Reserve, and:
- each asset expires and is rewritten into Cache Reserve 1 time per day
- each asset is read 2 times per day
the estimated cost for the month would be:
|Class B Operations||(1,000,000 assets) * (2 reads per day) * (30 days)||60,000,000||$21.60|
|Class A Operations||(1,000,000 assets) * (1 write per day) * (30 days)||30,000,000||$135.00|
|Storage||(1,000,000 assets) * (1MB per asset)||1,000 GB-months||$15.00|
Tips and best practices
Cache Reserve should be used with Tiered Cache enabled. Cache Reserve is designed for use with Tiered Cache enabled for maximum origin shielding. Using Cache Reserve without Tiered Cache may result in higher storage operation costs. Enabling Cache Reserve via the Cloudflare dashboard will check and provide a warning if you try to use Cache Reserve without Tiered Cache enabled.