oslabs-beta/DacheQL: GraphQL 缓存工具


DacheQL能简化 GraphQL 查询的缓存过程,以便开发人员提高其应用程序性能。
DacheQL 是一个利用 Redis 和 LRU 驱逐策略的轻量级 GraphQL 缓存工具。

GraphQL 是一种 API 查询语言,也是一种使用现有数据完成这些查询的运行时。GraphQL 为您的 API 中的数据提供了完整且易于理解的描述,使客户能够准确地询问他们需要什么,仅此而已,使 API 更容易随着时间的推移而发展,并支持强大的开发人员工具。

使用 GraphQL,您可以指定要从 API 请求的数据。你会得到你所需要的,不多也不少。GraphQL 查询总是返回可预测的结果。

安装和设置
如果您尚未安装 dacheql,请运行以下命令将 DacheQL 安装到您的应用程序中:npm install dacheql

将 DacheQL 与 Redis 一起使用
DacheQL 有两种使用方式。使用 DacheQL 的第一种方法是将其与 Redis 一起使用,Redis 是一种开源的内存数据存储,可用于客户端缓存。您需要确保您的计算机上已经安装了 Redis。

连接 Redis 客户端后,只需将其传递给我们的 DacheQL 函数,如下所示:

app.use(‘/graphql’, dacheQL({ redis } = {<redis: client>}, capacity, endpoint, TTL), expressGraphQL({ schema: schema, graphiql: true, }));

只需替换<redis: client>为redis: *name of your client*

由于我们使用的是 Redis,因此第二个参数capacity无关紧要,因为它用于我们的 LRU 缓存。你可以简单地capacity用任意的东西替换,比如50.
第三个参数是您实际使用 GraphQL 的端点。这个端点可能类似于http://localhost:3000/graphql
我们的最后一个参数TTL是驻留在 Redis 缓存中的时间。只需传入您希望查询在缓存中持续的时间(以秒为单位,如50)。

现在您可以使用 Redis 缓存 GraphQL 响应了!

将 DacheQL 与我们的自定义 LRU 驱逐策略缓存一起使用
如果您不使用 Redis 缓存,DacheQL 提供了一个中间件,用于使用服务器内存和我们的自定义缓存进行缓存,该缓存的行为符合 LRU 驱逐策略。您应该为此中间件输入的参数如下:
对于第一个参数,由于您没有使用 Redis,因此只需{}像这样传入一个空对象。
接下来是您希望缓存容纳的容量。这个容量是指我们的缓存何时开始驱逐项目。例如,如果您将容量设置为 50,它将在第 51 个唯一查询时驱逐一个项目。需要注意的是,如果你传入一个非整数,它会为你四舍五入。非整数、负数和小于 2 的容量将默认为简单地创建 GraphQL 提取而不将值存储在缓存中。
第三个参数是您实际使用 GraphQL 的端点。例如,这可能是http://localhost:3000/graphql.
我们的最后一个参数是生存时间,或者您希望此特定查询在缓存中持续多长时间。由于我们在这里没有使用 Redis,因此只需为您的 TTL 传递任何内容,因为我们的缓存不依赖此信息。
现在您可以使用我们的自定义 LRU 驱逐策略缓存您的 GraphQL 响应了!