Skip to content

REST 查询缓存中的 Cache-Control

对于 REST 终结点,你可以通过 Cache-Control 请求标头来影响数据墙DBW如何使用其内部查询结果缓存。

IMPORTANT

如果运行时配置中已禁用缓存,这些指令会被忽略,查询将按正常方式执行。

支持的 Cache-Control 值

行为
no-cache强制数据墙DBW绕过 L1 和 L2 缓存,从数据库读取最新数据,并用新结果更新缓存。
no-store告诉数据墙DBW完全不要缓存该响应(既不写入 L1/L2,也不会尝试从缓存读取)。

行为说明

  • 指令匹配不区分大小写。
  • 数据墙DBW不会解释其他标准 Cache-Control 指令,例如 max-agemax-stale
  • 仅适用于 REST 查询操作。不用于 GraphQL 请求级缓存指令。
  • Cache-Control 请求头会同时影响 L1 和 L2 缓存。

NOTE

数据墙DBW在任何缓存操作中都不会主动设置 cache-control 响应头。

指令:no-cache

强制执行一次全新的读取,并更新缓存层。

请求

http
GET /api/Books
Cache-Control: no-cache
Accept: application/json

响应(示例)

http
HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

效果:缓存现在会保存这份最新结果(受已配置 TTL 约束)。

指令:no-store

如果缓存中已有值,则使用现有缓存值;否则查询数据库,但不会把新结果写入或刷新到缓存中。

请求

http
GET /api/Books
Cache-Control: no-store
Accept: application/json

响应(示例)

http
HTTP/1.1 200 OK
Content-Type: application/json

[
  { "id": 1, "title": "The Hobbit" },
  { "id": 2, "title": "The Silmarillion" }
]

效果:如果这份结果此前并未进入缓存,本次也不会被写入缓存。之后的 only-if-cached 请求如果之前没有其他请求把结果写入缓存,就可能失败。

回顾

  • 当你需要强制从数据库刷新数据,并同时更新缓存时,请使用 no-cache
  • 当你想拿到数据,但不希望这次响应改变缓存状态时,请使用 no-store(但它仍然可能读取已有缓存值)。
  • 不设置该标头时,使用默认缓存行为。

数据墙DBW 产品文档与开发指南。