@apollo/utils.keyvaluecache

中文文档
4.0.0发布于 2025/05/22MITTypeScriptCommonJS近 30 天下载 1801.9万

最小键值缓存接口

中文使用文档

KeyValue 缓存接口

export interface KeyValueCache<
  V = string,
  SO extends KeyValueCacheSetOptions = KeyValueCacheSetOptions,
> {
  get(key: string): Promise<V | undefined>;
  set(key: string, value: V, options?: SO): Promise<void>;
  delete(key: string): Promise<boolean | void>;
}

这个接口定义了一个最小相容的缓存,意在被阿波罗服务器使用(但不限于). 执行者主要是: KeyvAdapter 从 @apollo/utils.keyvadapter 软件包。 (KeyvAdapter 与a项一并审议 Keyv 可能你更有趣 除非你真的在建缓存!)

记忆LRUCACHE

这个课包 lru-cache 执行 KeyValueCache 接口。 它接受 LRUCache.Options 象建筑者所争论的那样 LRUCache 被创造的。 默认 maxSize 财务报告和审定财务报表 sizeCalculator 用于防止未绑定的缓存;这些都可以通过构造器参数来调整.

const cache = new InMemoryLRUCache({
  // create a larger-than-default `LRUCache`
  maxSize: Math.pow(2, 20) * 50,
});

前置 KeyValue 缓存

这个课包了一个 KeyValueCache 为通过此包输入缓存的密钥提供指定的前缀.

const cache = new InMemoryLRUCache();
const prefixedCache = new PrefixingKeyValueCache(cache, "apollo:");

使用这个方法的一个原因是,如果一个软件的单块想要使用缓存来进行多个特性. 例如,你可以通过一个 KeyValueCache 作为 cache 选项到 @apollo/server是因为 ApolloServer class; 它向插件和其他特性提供此缓存作为默认要使用的缓存( 如果用户不提供特定插件自己的缓存) 。 每个特性都使用 PrefixingKeyValueCache 具有不同的前缀来防止不同特性相踩对方的数据.

但是,如果你明确配置其中之一,你可以 没有 想要添加此前缀 。 这样的话,你可以将您的缓存包裹在一个缓存中 PrefixingKeyValueCache.cacheDangerouslyDoesNotNeedPrefixesForIsolation。这个缓存与它所包裹的缓存的唯一区别是,当它直接传递到一个 PrefixingKeyValueCache,不应用前缀.

也就是说,我们假设你正在使用一个这样的课程:

class SomePlugin {
  private cache: KeyValueCache;
  constructor(cache: KeyValueCache) {
    this.cache = new PrefixingKeyValueCache(cache, "some:");
  }
}

如果您将您的插件设置为 new SomePlugin({ cache: myRedisCache }) 然后插件会添加 some: 当与您的缓存交互时, 切入到所有键上, 但如果您设置为 new SomePlugin({ cache: PrefixingKeyValueCache.cacheDangerouslyDoesNotNeedPrefixesForIsolation(myRedisCache) }),然后插件不会应用其前缀。 您只应该在您确信此特性使用此缓存不会与其它特性相重叠的情况下这样做:也许这是您为使用此缓存而配置的唯一特性,或者也许该特性提供了对缓存密钥的适当控制,您可以确保该密钥的隔离而无需插件的前缀.

软件 ApolloServer 传出单曲 KeyValueCache 如果 PrefixesAreUnnecessaryForIsolationCache 向它提供; 它可以用静态检查这个条件 PrefixingKeyValueCache.prefixesAreUnnecessaryForIsolation 方法(比 instanceof 检查万一有多个副本 @apollo/utils.keyvaluecache 已安装).

错误是 misses 缓存

这个课包了一个 KeyValueCache 为通过Redis这样的客户端连接的缓存提供出错容性。 如果有一个 错误,这个包件将把它当作缓存错失(如果 logger 页:1.

实例用法( 使用 keyv Redis客户端和我们的 KeyvAdapter看起来像这样

import Keyv from "keyv";
import { KeyvAdapter } from "@apollo/utils.keyvadapter";
import { ErrorsAreMissesCache } from "@apollo/utils.keyvaluecache";

const redisCache = new Keyv("redis://user:pass@localhost:6379");
const faultTolerantCache = new ErrorsAreMissesCache(
  new KeyvAdapter(redisCache),
);

版本与发布记录

@apollo/utils.keyvaluecache 共发布 10 个版本,首次发布于 2022/05/28;过去 12 个月发布了 0 个版本。

版本发布日期距今
4.0.0latest2025/05/221.5 年前
3.1.02023/09/143 年前
3.0.02023/04/183 年前
2.1.12023/04/043 年前
2.1.02022/12/103 年前
1.0.22022/11/243 年前

关于 @apollo/utils.keyvaluecache 的常见问题

@apollo/utils.keyvaluecache 是什么?

最小键值缓存接口

如何安装 @apollo/utils.keyvaluecache?

在项目目录运行 npm install @apollo/utils.keyvaluecache,或使用 pnpm add / yarn add / bun add。

@apollo/utils.keyvaluecache 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@apollo/utils.keyvaluecache 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@apollo/utils.keyvaluecache 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@apollo/utils.keyvaluecache 可以商用吗?

@apollo/utils.keyvaluecache 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@apollo/utils.keyvaluecache 的下载量有多少?

根据 npm 官方下载统计,@apollo/utils.keyvaluecache 在 2026/10/07 – 2026/11/05 这 30 天内被下载 18,019,319 次,日均约 600,644 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@apollo/utils.keyvaluecache 还在维护吗?

最新版本 4.0.0 发布于 2025/05/22(1.5 年前);至今共发布 10 个版本,其中过去 12 个月发布了 0 个;首次发布于 2022/05/28。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。