dot 快速的未来即将在您的城市举办的活动中到来。

加入我们在 Redis 发布会上

使用这种有效的模式加速 MEAN 和 MERN 堆栈应用程序

如果您在设计和构建软件时没有关注性能,那么您的应用程序在投入生产时可能会遇到严重的瓶颈。

随着时间的推移,开发社区已经了解了常见技巧,这些技巧作为可靠的设计模式来解决众所周知的难题,包括应用程序性能。

那么什么是设计模式呢?它们是解决软件系统中反复出现的设计问题的推荐实践。设计模式包含四个部分:名称、问题描述(模式适用的特定条件集)、解决方案(解决问题的最佳通用策略)以及一组后果。

两个开发堆栈已成为构建Node.js 应用程序的流行方式,它们是MEAN 堆栈MERN 堆栈。MEAN 堆栈由 MongoDB 数据库、Express 和 Angular.js 框架以及 Node.js 组成。它是一个纯 JavaScript 堆栈,帮助开发人员创建网站或应用程序的各个部分。相比之下,MERN 堆栈由 MongoDB、Express 和 ReactJS 框架以及 Node.js 组成。

这两个堆栈都运行良好,这解释了它们受欢迎的原因。但这并不意味着生成的软件可以尽可能快地运行——或者说它需要以多快的速度运行。

在这篇文章中,我们将分享一个流行的设计模式,开发人员使用 Redis 与 MEAN 和 MERN 堆栈应用程序一起使用来提高应用程序性能:主数据查找模式。我们将详细解释该模式,并附带概述、典型用例和代码示例。我们的目的是帮助您了解何时以及如何在自己的软件开发中使用此特定模式。

构建电影应用程序

为了演示这篇文章,我们的演示应用程序展示了一个使用基本创建、读取、更新和删除 (CRUD) 操作的电影应用程序。

Movie application demo

电影应用程序仪表板在顶部包含一个搜索部分,在中间包含一个电影卡片列表。浮动加号图标在用户选择它时显示一个弹出窗口,允许用户输入新的电影详细信息。搜索部分有一个文本搜索栏,以及文本搜索和基本搜索(即基于表单的搜索)之间的切换链接。每个电影卡片都有编辑和删除图标,当鼠标悬停在卡片上时,这些图标会显示出来。

本教程使用一个 GitHub 示例演示,该演示使用以下工具构建:

  • 前端:ReactJS (18.2.0)
  • 后端:Node.js (16.17.0)
  • 数据库:MongoDB
  • 缓存和数据库:Redis 堆栈(使用 Docker)

您可以使用GitHub 上的代码详细了解。

主数据查找模式

一个持续的开发挑战是(迅速)创建、读取、更新和(可能)删除长期存在、很少更改并且经常被其他数据直接或间接引用的数据。这就是主数据的定义,尤其是在它还代表组织的核心数据时,这些数据被认为对其运营至关重要。

主数据通常很少更改。国家列表、流派和电影语言通常保持不变。这为加速提供了机会。您可以解决访问和操作操作,从而保留数据一致性,并快速进行数据访问。

从开发人员的角度来看,主数据查找是指在业务交易、应用程序设置以及软件以任何其他方式检索信息时访问主数据的过程。主数据查找的示例包括获取用户界面 (UI) 元素(例如下拉对话框、选择值、多语言标签)的数据、获取常量、用户访问控制、主题和其他产品配置。即使您主要依靠 MongoDB 作为持久数据存储,您也可以这样做。

redis, mongodb, and application diagram
要从 Redis 提供主数据,请将数据从 MongoDB 预加载。
  1. 在应用程序启动时从 MongoDB 读取主数据,并将数据的副本存储在 Redis 中。这将预先缓存数据,以便快速检索。使用脚本或 cron 作业反复将主数据复制到 Redis 中。
  1. 应用程序请求主数据。
  1. Redis 将提供主数据,而不是 MongoDB 提供数据。

用例

当您需要时,请考虑使用此模式

  • 高速提供主数据:顾名思义,几乎每个应用程序都需要访问主数据。使用 Redis 预先缓存主数据可以高速将其提供给用户。
  • 支持庞大的主表:主表通常包含数百万条记录。在其中进行搜索会导致性能瓶颈。使用 Redis 对主数据执行实时搜索,以提高性能,并实现毫秒级以下的响应。
  • 推迟昂贵的硬件和软件投资:通过使用 Redis,您可以推迟昂贵的基础设施升级。无需 CFO 开出支票,即可获得性能和扩展优势。

演示

下图说明了一种标准方法来展示适合主数据查找的 UI。负责此应用程序的开发人员将某些字段视为主数据,包括电影语言、国家、流派和评分,因为它们是常见应用程序交易所必需的。

考虑当用户想要添加一部新电影并单击电影应用程序加号图标时出现的弹出对话框。弹出窗口包含国家和语言的下拉菜单。在此演示中,Redis 加载值。

movie interface language selection
添加新电影的弹出屏幕

代码

下面的两个代码块显示了从 MongoDB 和 Redis 获取主数据的提取查询,该查询加载国家和语言下拉值。

以前,如果应用程序使用 MongoDB,它将搜索静态数据库以检索电影的国家和语言值。如果从持久存储中读取,这可能很耗时——如果信息是静态的,则效率低下。

相反,代码块(在右侧)中的“之后”视图显示了主数据可以只用几行代码访问——以及更快的响应时间。

Query to fetch masters from MongoDB and Redis
从 MongoDB 和 Redis 获取主数据的查询
Query to fetch masters from MongoDB Atlas and Redis
从 MongoDB Atlas 和 Redis 获取主数据的查询

您是否在这里感觉到一种模式?

主数据查找模式并非唯一可以用来提高应用程序性能的设计模式。

要了解在使用 Redis 进行性能改进时可以使用的其他有效技术,包括“缓存旁路”设计模式和“写后”设计模式,请下载我们的电子书,三种加速 MEAN 和 MERN 堆栈应用程序的设计模式