今天,性能是开发Web服务时需要评估的最重要的指标之一。 保持客户的参与对任何公司,尤其是初创公司都是至关重要的,因此,提高性能和减少页面加载时间非常重要。
当运行与数据库交互的Web服务器时,其操作可能会成为瓶颈。 这里的MongoDB也不例外,随着您的MongoDB数据库规模的扩大,事情真的会变慢。 如果数据库服务器与Web服务器分离,则此问题甚至会变得更糟。 在这样的系统中,与数据库的通信会导致很大的开销。
幸运的是,您可以使用一种称为缓存的方法来加快处理速度。 在本教程中,我们将介绍此方法,并了解如何使用它来增强Node.js Web服务的性能。
背景
缓存是一种旨在解决主要存储问题的策略,这意味着:存储越大,存储速度就越慢,反之亦然。 在计算机中,您的硬盘驱动器很大但相对较慢。 然后,您获得了速度更快但存储容量较小的RAM,最后是速度非常快但很小的CPU寄存器。 下图展示了内存问题:
缓存是将最近访问的数据存储在更快的存储系统中的组件。 每次请求该数据时,都可以(以某种可能性)将其从更快的内存中拉出。 缓存背后的基本假设是,最近读取的数据更有可能再次被读取。 因此,它们应该存储在更快的内存中,以便即使下一次读取也会更快。
为了更好地理解这个概念,请考虑一群坐在图书馆里的人。 图书馆本身代表着一个巨大的存储系统,但是很难在那里找到一些书籍。 在我们的想象中,图书馆是一个庞大而缓慢的存储机制。 假设这些人每当找到一本书时都阅读但不归还,因为他们宁愿将其放在桌子上。 他们之所以有这种行为,是因为他们确定很快就会再次需要它,并且将那本书放在更便于阅读的桌子上是有意义的。 在此示例中,库是主存储系统,而表是我们的缓存。
在本教程中,我们将构建一个称为“ fastLibrary”的Web服务。 在这里,我们将实现虚拟库缓存的概念。 MongoDB将成为主要的存储系统,我们将使用Redis构建缓存。 我们的Web服务器将与Express.js一起使用 。 如果您不熟悉这些技术中的任何一种,建议您在开始本教程之前加深这些主题。 为了我们的目的,建议您阅读一下SitePoint上发布的以下文章:
基本系统
第一步,我们将构建一个基本的Web服务器,将数据存储在MongoDB中。 在此演示中,我们将其命名为“ fastLibrary”。 该服务器将具有两个基本操作:
- POST
/book
:此端点将接收书名,作者和书的内容,并在数据库中创建书条目。 - GET
/book/:title
:此端点将获得标题并返回其内容。 我们假设书名唯一地标识书籍(因此,不会有两本书具有相同的书名)。 当然,更好的选择是使用ID。 但是,为了简单起见,我们仅使用标题。
这是一个简单的库系统,但是稍后我们将添加更多高级功能。
现在,让我们创建应用程序所在的目录:
mkdir fastLibrary
cd fastLibrary
本教程假定您已安装No