1. 课程介绍和设置
5m

👋欢迎来到使用 Java 和 DGS 缓存子图!

我们非常高兴您参加我们和 Java 系列课程。

现在是探索提升我们的性能的一种策略的时候了:缓存!在此课程中,我们将探讨缓存的工作原理,并将其应用到我们的 GraphQL 字符串——以及我们用于解决它们的实际数据。

让我们开始吧!

为什么要缓存?

当我们构建一个联邦架构时,我们从一开始就优先考虑性能:一个化路由器接收客户端请求,根据的责任将其拆分,并执行更小的请求来收集所需的所有数据。有了作为核心,我们的路由器已经了解如何询问每个获取其负责的数据——仅此而已!这使我们的精简、高效且可组合。

通过在子图服务器端实现缓存,我们为整个提供了另一项小小的性能提升。

使用缓存,我们的可以一次解析和验证某个操作——然后,服务器在未来收到相同的操作时可以更快速地执行该操作。

当我们缓存由 方法返回的数据时,收益会进一步扩大;这使我们的 只需获取一次数据,然后在其再次被查询时直接从其缓存中提供结果。只需进行一点配置,我们就能启动一个新的缓存,该缓存使我们能够定义 什么应该被缓存以及 多长时间它应该保持被缓存的状态。而且我们使用 DGS、Spring Boot 以及名为 Caffeine的缓存库来实现这一切。

我们正在构建什么

当我们学习并实现这些概念时,我们将致力于我们的课程项目: Airlock

The Airlock app homepage with a list of places to book.

Airlock 是一款星际旅行预订应用:这是我们能够利用的资源,用于在浩瀚的宇宙中找到很酷的下榻之所!我们已经在GraphQL 课程简介中构建了该房源服务器的起点。我们的项目还包括 dataloaders目录,我们将在 数据加载器与 Java 和 DGS中详细介绍它。

在该课程中,我们将探讨 和数据缓存如何能够帮助 Airlock 以比以往任何时候都更快的速度提供房源。

项目设置

要跟上该课程的进度,你需要具备以下条件

先决条件

我们假设你熟悉 概念,如类型、查询和 。如果你需要复习,请查看我们的 GraphQL 与 Java 和 DGS 课程简介

我们的房源服务器是一个 ,这意味着它是更大联邦图中的一个部分。要复习 ,请查看我们的 Java 和 DGS 联合课程

还应熟悉 Java 编程概念(此课程使用 JDK 17)和 Spring Boot的基本知识。

代码编辑器或 IDE

我们使用的是 IntelliJ IDEA(社区版)

许多流行的 IDE 提供可启用 语法高亮的插件。对于 IntelliJ,我们推荐使用 GraphQL 插件

克隆代码库

我们先来了解一下代码设置。

打开一个终端到一个新目录并运行以下命令

git clone https://github.com/apollographql-education/odyssey-caching-dgs.git

以下是项目结构,重点关注 src目录:

📦 odyssey-caching-dgs
┣ 📂 src
┃ ┣ 📂 main
┃ ┃ ┣ 📂 java/com/example/listings
┃ ┃ ┃ ┣ 📂 datafetchers
┃ ┃ ┃ ┣ 📂 dataloaders
┃ ┃ ┃ ┣ 📂 datasources
┃ ┃ ┃ ┣ 📂 models
┃ ┃ ┃ ┣ 📄 ListingsApplication.java
┃ ┃ ┃ ┗ 📄 WebConfiguration.java
┃ ┃ ┗ 📂 resources
┃ ┃ ┃ ┣ 📂 schema
┃ ┃ ┃ ┃ ┗ 📄 schema.graphql
┃ ┃ ┃ ┗ 📄 application.properties
┃ ┗ 📂 test/java/com/example/listings
┗ 📄 ...other configuration files

注意:如果你在任何时候遇到问题,请查看 final分支,以查看代码库的最终状态。

运行应用

最后,让我们启动并运行我们的服务器。

在 IDE 中打开该项目并导航到主 ListingsApplication文件,该文件位于 com.example.listings包中。这是我们应用的起点。

@SpringBootApplication
public class ListingsApplication {
public static void main(String[] args) {
SpringApplication.run(ListingsApplication.class, args);
}
}

在 IntelliJ 中,我们在 main函数旁边的边距中有一个方便的绿色播放按钮,或者位于界面顶部的播放按钮。

或者,你可以打开一个新终端到你的项目根目录并运行以下命令

./gradlew bootRun

在 IDE 运行输出中,我们应该会看到我们的应用正在运行!

> Task :ListingsApplication.main()
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.3.1)

测试查询

我们将使用 Sandbox Explorer对我们的服务器进行查询测试并衡量我们的性能改进。一旦你的应用启动并运行,请打开 Sandbox,并粘贴服务器的 端点。

默认情况下,其值应如下所示。

https://127.0.0.1:8080/graphql

运行一些测试查询!通过 文档面板手动构建它们,或从下面的可折叠菜单中复制。

https://studio.apollographql.com/sandbox/explorer

The Apollo Sandbox Explorer, connected to the running DGS server endpoint

检查点

安装清单

要点

  • 我们将对 的两个部分应用缓存:GraphQL 本身以及它们返回的数据

下一步

让我们深入了解我们的第一个主题:缓存

下一步

分享你对本课程的问题和评论

本课程目前处于

测试版
.您的反馈有助于我们提升课程品质!如果您遇到困难或感到困惑,请告知我们,我们会给予您帮助。所有评论都是公开的,并且必须遵守 Apollo 行为准则。请注意,已被解决或处理的评论可能会被删除。

您需要一个 GitHub 帐户才能在下面发帖。没有帐户? 改在我们的 Odyssey 论坛上发帖。