使用 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/