使用 Cloudflare Cache API 存储的页面早于预期过期
Page stored using Cloudflare Cache API expires earlier than expected
我正在开发一个后端 API 使用 Cloudflare Workers 将令牌缓存到各个单独的页面中,例如 http://cache.api/[tokenId] 令牌值本身作为 body 内容,使用缓存 API.
const tokenId = 'fakeJWT';
const internalUrl = ''.concat(
'http://cache.api/',
tokenId // the query string
);
const cacheUrl = new URL(internalUrl);
const cacheKey = new Request(cacheUrl.toString());
const cache = caches.default;
let response = new Response(tokenId);
response.headers.append('Cache-Control', 's-maxage=86400'); // 24 hours
await cache.put(cacheKey, response.clone());
我已将 Cache-Control
header 配置为 24 小时到期。然后,我在同一个 Cloudflare Workers 中写了另一个 API 来检查缓存是否存在,它在 10 分钟后存在,但在 15 分钟后不存在。
const internalUrl = ''.concat(
'http://cache.api/',
tokenId // the query string
);
const cacheUrl = new URL(internalUrl);
const cacheKey = new Request(cacheUrl.toString());
const cache = caches.default;
let response = await cache.match(cacheKey);
if (!response) {
console.log(
`Cache url for ${cacheUrl} is not present`
);
return unauthorised(`${pathName}: This user session has expired! cache url is ${cacheUrl}`);
}
else
{
let response = new Response(tokenId);
response.headers.append('Cache-Control', 's-maxage=86400'); // in seconds
await cache.put(cacheKey, response.clone());
}
我错过了什么吗?
可能发生的是缓存 miss
而不是过期。使用 Cloudflare 进行缓存时,您不应期望缓存得到保证,特别是使用缓存 API 文档提到它是 data-center 特定的(不在全球传播)-
https://developers.cloudflare.com/workers/runtime-apis/cache/#background
缓存应该是提高性能的机制,但换句话说,缓存不是保证存储的依赖。如果您的 use-case 需要这个,最好使用 Workers Key Value -
https://developers.cloudflare.com/workers/learning/how-kv-works/
我正在开发一个后端 API 使用 Cloudflare Workers 将令牌缓存到各个单独的页面中,例如 http://cache.api/[tokenId] 令牌值本身作为 body 内容,使用缓存 API.
const tokenId = 'fakeJWT';
const internalUrl = ''.concat(
'http://cache.api/',
tokenId // the query string
);
const cacheUrl = new URL(internalUrl);
const cacheKey = new Request(cacheUrl.toString());
const cache = caches.default;
let response = new Response(tokenId);
response.headers.append('Cache-Control', 's-maxage=86400'); // 24 hours
await cache.put(cacheKey, response.clone());
我已将 Cache-Control
header 配置为 24 小时到期。然后,我在同一个 Cloudflare Workers 中写了另一个 API 来检查缓存是否存在,它在 10 分钟后存在,但在 15 分钟后不存在。
const internalUrl = ''.concat(
'http://cache.api/',
tokenId // the query string
);
const cacheUrl = new URL(internalUrl);
const cacheKey = new Request(cacheUrl.toString());
const cache = caches.default;
let response = await cache.match(cacheKey);
if (!response) {
console.log(
`Cache url for ${cacheUrl} is not present`
);
return unauthorised(`${pathName}: This user session has expired! cache url is ${cacheUrl}`);
}
else
{
let response = new Response(tokenId);
response.headers.append('Cache-Control', 's-maxage=86400'); // in seconds
await cache.put(cacheKey, response.clone());
}
我错过了什么吗?
可能发生的是缓存 miss
而不是过期。使用 Cloudflare 进行缓存时,您不应期望缓存得到保证,特别是使用缓存 API 文档提到它是 data-center 特定的(不在全球传播)-
https://developers.cloudflare.com/workers/runtime-apis/cache/#background
缓存应该是提高性能的机制,但换句话说,缓存不是保证存储的依赖。如果您的 use-case 需要这个,最好使用 Workers Key Value -
https://developers.cloudflare.com/workers/learning/how-kv-works/