跳转到内容
搜索文档

Durable Object 中的内存状态

最后更新 查看 MarkdownAgent 设置

内存状态意味着每个 Durable Object 在任意特定时刻都有一个活动实例。发送到该 Durable Object 的所有请求都由同一实例处理。您可以在内存中存储一些状态。

只要 Durable Object 未被从内存中驱逐,Durable Object 中的变量就会保持状态。

常见模式是在首次访问时从持久存储初始化 Durable Object 并设置实例变量。由于后续访问会路由到同一 Durable Object,因此可以返回任何已初始化的值,而无需再调用持久存储。

import { DurableObject } from "cloudflare:workers";

export class Counter extends DurableObject {
  constructor(ctx, env) {
    super(ctx, env);
    // `blockConcurrencyWhile()` ensures no requests are delivered until
    // initialization completes.
    this.ctx.blockConcurrencyWhile(async () => {
      let stored = await this.ctx.storage.get("value");
      // After initialization, future reads do not need to access storage.
      this.value = stored || 0;
    });
  }

  // Handle HTTP requests from clients.
  async fetch(request) {
    // use this.value rather than storage
  }
}

给定 Durable Object 实例可能与同一 Worker 代码中定义的其他实例共享全局内存。

在上面的示例中,使用全局变量 value 而非实例变量 this.value 是不正确的。两个不同的 Counter 实例各自拥有独立的 this.value 内存,但可能共享全局变量 value 的内存,导致意外结果。因此,最好避免使用全局变量。

这篇文档对您有帮助吗?