GraphQL 是一种用于 API 的查询语言,可以让前端开发人员灵活地请求数据并减少不必要的网络请求。然而,在大型应用程序中,GraphQL 查询可以变得相当复杂和缓慢,尤其是在处理大量数据时。这就是我们需要 Redis 的原因。
Redis 简介
Redis 是一款开源的内存数据存储系统,广泛用于缓存、消息队列和数据存储等领域。Redis 的出色性能和灵活性使其成为处理快速查询的理想选择,特别是在 GraphQL API 中。
Redis 与 GraphQL 结合使用的好处
在 GraphQL 中,每个查询都需要从数据库中获取数据。当查询变得复杂时,必须在多个表中进行关联查询,这可能导致许多 JOIN 操作和非常慢的响应时间。这是 Redis 显得非常有用的地方:使用 Redis 可以将查询结果缓存起来以避免重复查询。
具体来说,在每次查询完成后,将查询结果存储在 Redis 中。然后,在下次请求相同的数据时,只需要从 Redis 中获取缓存的结果,而不是再次进行数据库查询。这可以极大地改善性能,减少响应时间。
在 Node.js 中使用 Redis
下面是一个演示 Redis 在 Node.js 中如何使用的示例:
-- -------------------- ---- ------- ----- ----- - ----------------- ----- ------ - --------------------- -- ------ -------- ---------------- - ------ --- --------------- -- - -- ------- ----------------- ----- ------- -- - -- ------------- -- ------- --- ----- - -------------- ----- --------- ------- ---------------------------- - -- ------------------- ---- - -------------------------- ------- ----- ------ - ---------------------------- ----------------- ------------------------ ---------------- - --- --- -
在上面的代码中,我们使用 Redis 的 get 和 set 方法从 Redis 缓存中获取和存储查询结果。如果结果存在,则返回缓存的结果,否则进行数据库查询,在将查询结果存储到 Redis 缓存中。
如何将 Redis 与 GraphQL 结合使用
接下来,我们将完成一个示例项目,演示 Redis 和 GraphQL 结合使用的过程。
步骤 1:安装依赖项
我们将使用以下依赖项:
graphql
: GraphQL 核心库。express
: 基于 Node.js 的 Web 开发框架。express-graphql
: 一个可用于集成 GraphQL 的中间件。redis
: Redis 客户端库。
通过以下命令安装这些依赖项:
npm install graphql express express-graphql redis
步骤 2:准备数据
为了演示 GraphQL 和 Redis 结合使用的过程,我们将创建一个用于存储书籍和作者信息的简单数据库。我们首先创建以下文件:
-- -------------------- ---- ------- -- --------- - ---- - -------- ----------- -------- ----------- --- -- ---- - -------- ----- --------- ----------- --- -- ---- - -------- ---- ----------- ----------- --- - - -- ----------- - ---- - ------- --------- -- ------ -- ---- - ------- ---- -- ---- - ------- ------ - -
步骤 3:创建 GraphQL Schema
接下来,我们将创建 GraphQL Schema,定义我们可以查询的书籍和作者信息。将以下代码保存到 schema.js
文件中:
-- -------------------- ---- ------- ----- - ------------------ -------------- ---------- -------------- ----------- - - ------------------- ----- -------- - --- ------------------- ----- ------- ------- - --- - ----- --------- -- ------ - ----- ------------- -- ------- - ----- ----------- --------------- ----- - -- - ----- ------ ------ -------------------- - ----------------- - - - --- ----- ---------- - --- ------------------- ----- --------- ------- - --- - ----- --------- -- ----- - ----- ------------- -- ------ - ----- ---------------------- --------------- ----- - -- - ----- ------ ------ --------------------------------- ------------ -- ------------- --- ---------- --------- -- ------------------------------- - - - --- ----- --------- - --- ------------------- ----- ---------------- ------- - ----- - ----- --------- ----- - --- - ----- --------- - -- --------------- ----- - -- - ----- ------ ------ ------------------------------ - -- ------- - ----- ----------- ----- - --- - ----- --------- - -- --------------- ----- - -- - ----- ------ ------ -------------------------------- - -- ------ - ----- ---------------------- --------------- ----- - -- - ----- ------ ------ ------------------------------------------ -- ----------------------------- -- - -- -------- - ----- ------------------------ --------------- ----- - -- - ----- ------ ------ ---------------------------------------------- -- --------------------------------- -- - - - --- -------------- - --- --------------- ------ --------- ---
在上面的代码中,我们定义了两个类型:Book
和 Author
。这两种类型都可以在 GraphQL 中查询,并且它们也可以相互关联。我们还定义了一个根查询对象 RootQuery
,它包含了可以查询的所有字段。
步骤 4:创建 Express 应用程序
我们将使用 Express 应用程序来公开我们的 GraphQL Schema。将以下代码保存到 server.js
文件中:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----------- - --------------------------- ----- ------ - -------------------- ----- ----- - ----------------- ----- ------ - --------------------- -- ------ -------- ---------------- - ------ --- --------------- -- - -- ------- ----------------- ----- ------- -- - -- ------------- -- ------- --- ----- - -------------- ----- --------- ------- ---------------------------- - -- ------------------- ---- - -------------------------- ------- ----- ------ - ---------------------------- ----------------- ------------------------ ---------------- - --- --- - ----- --- - ---------- -------- ----------- ------------- ------- --------- ---- -- -- ---------------- -- -- - ------------------- ------- ---
在上面的代码中,我们首先创建一个 Redis 客户端。然后,我们编写了一个 getResult 函数,该函数从 Redis 缓存中获取查询结果。如果结果不存在,则进行数据库查询并将结果存储在 Redis 缓存中。
最后,我们使用 Express 应用程序公开 GraphQL Schema,将查询请求发送到 Redis。
步骤 5:测试应用程序
完成上述步骤后,我们可以启动 Node.js 应用程序并测试它的工作方式。在 terminal 中运行以下命令:
node server.js
然后,在浏览器中打开 http://localhost:4000/graphql
,你将看到一个 GraphQL Playground 介面。在这个介面中,你可以键入查询,例如:
{ books { title author { name } } }
此查询将检索所有书籍和相应作者的名称。此查询将查询 Redis 缓存,如果结果不存在,则将结果存储在 Redis 中。
结论
使用 Redis 可以大大加速 GraphQL 查询的响应时间,同时减少数据库查询的次数。在本文中,我们演示了如何在 Node.js 中使用 Redis 缓存 GraphQL 查询结果。Redis 和 GraphQL 结合使用的好处远不止如此,你也可以将这种技术应用于其他 Web 技术中。这是一个很好的要点,即使是拥有大量并复杂数据的项目,我们也可以通过使用 Redis 以更快,更可靠的方式来管理它们。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66f8214cc5c563ced5be7843