Skip to content

缓存与性能优化

数据墙DBW 提供了两级缓存体系来减少数据库请求压力、提升高频查询的响应速度。你可以按全局或实体粒度灵活配置缓存策略。

一级缓存(L1)

一级缓存是进程内的内存缓存,访问速度最快,适合读多写少的场景:

json
{
  "runtime": {
    "cache": {
      "enabled": true,
      "ttl-seconds": 60
    }
  },
  "entities": {
    "Products": {
      "source": "dbo.products",
      "cache": {
        "enabled": true,
        "ttl-seconds": 30,
        "level": "L1"
      }
    }
  }
}

一级缓存行为

  • 按"路由 + 查询参数"维度缓存结果,相同请求直接命中内存。
  • 当该实体发生 create、update 或 delete 操作时,相关缓存自动失效。
  • 实体级 ttl-seconds 会覆盖全局 TTL 值。
  • 仅适用于 REST 端点。

一级缓存最适用于数据变动频率低、读取频繁的场景,例如产品目录、配置字典、地区列表等。

二级缓存(L2)

二级缓存通过 Redis 实现分布式缓存,解决多实例部署下的缓存共享问题:

json
{
  "runtime": {
    "cache": {
      "enabled": true,
      "ttl-seconds": 30,
      "level-2": {
        "enabled": true,
        "provider": "redis",
        "connection-string": "localhost:6379",
        "partition": "prod-api"
      }
    }
  }
}

L1L2 组合模式

当实体配置为 "level": "L1L2"(默认级别)时,请求经过三级查找:

text
请求 → L1(内存)→ L2(Redis)→ 数据库 → 回写 L2 → 回写 L1 → 响应

这意味着:

  • 同一实例的后续请求从 L1 内存命中,几乎无延迟。
  • 其他实例可以从 L2 获取结果并升温到自己的 L1。
  • 容器重启后,L1 丢失但 L2 命中时仍可避免数据库查询。

分区隔离

通过 partition 参数可以为不同环境创建独立的缓存空间。只有配置相同分区值的实例才会共享缓存。这适用于:

  • 隔离生产与测试流量。
  • 多租户场景下的缓存空间划分。
  • 防止无关服务的缓存互相污染。

HTTP 缓存头

数据墙DBW 支持标准的 HTTP 缓存头(Cache-ControlETag 等),允许客户端和中间代理参与缓存决策。配置方式请参阅 HTTP 缓存配置参考。

缓存策略建议

场景建议配置
单实例部署,读多写少L1,TTL 设为 30–120 秒
多实例水平扩展L1L2,搭配 Redis
实时性要求高关闭缓存或 TTL 设极短值
混合场景按实体粒度差异化配置

下一步

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