跳至主要内容

密钥过期(密钥的 TTL)

Deno KV 目前处于测试阶段

Deno KV 和相关的云原生 API(如队列和 cron)目前处于**实验阶段**,**可能会发生变化**。虽然我们尽力确保数据持久性,但数据丢失是可能的,尤其是在 Deno 更新期间。

使用 KV 的 Deno 程序在启动程序时需要 --unstable 标志,如下所示

deno run -A --unstable my_kv_code.ts

从 1.36.2 版本开始,Deno KV 支持密钥过期,允许开发人员控制 KV 数据库中密钥的生存时间 (TTL)。这允许将过期时间戳与密钥关联,之后密钥将自动从数据库中删除。

const kv = await Deno.openKv();

// `expireIn` is the number of milliseconds after which the key will expire.
function addSession(session: Session, expireIn: number) {
await kv.set(["sessions", session.id], session, { expireIn });
}

Deno CLI 和 Deno Deploy 都支持密钥过期。

多个密钥的原子过期

如果在同一个原子操作中设置了多个密钥,并且它们具有相同的 expireIn 值,则这些密钥的过期将是原子的。例如

const kv = await Deno.openKv();

function addUnverifiedUser(
user: User,
verificationToken: string,
expireIn: number,
) {
await kv.atomic()
.set(["users", user.id], user, { expireIn })
.set(["verificationTokens", verificationToken], user.id, { expireIn })
.commit();
}

注意事项

过期时间戳指定了密钥可以从数据库中删除的最早时间。实现允许在指定时间戳后的任何时间过期密钥,但不能在之前。如果您需要严格执行过期时间(例如出于安全目的),请将其作为值的字段添加,并在从数据库中检索值后进行检查。