dot Redis 8 来了——而且是开源的

了解更多

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

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

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

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

MEAN 堆栈MERN 堆栈已经成为构建 Node.js 应用程序的流行方式。 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 stack (使用 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 堆栈应用程序的三种设计模式