Node里使用Redis作为MongoDB数据库的中间缓存

MongoDB是世界上最受欢迎的NoSQL数据库之一。 系统的简单性使其易于调整和维护。

当我们在Web服务中使用MongoDB之类的数据库时,我们往往会忽略其中的性能部分。当数据库扩展到一个很大的容量时,它可能会变慢。 原因可能是基础架构设置或系统配置不正确(如无索引等)。 如果您的Web服务器和数据库服务器在不同的系统上运行,那么延迟也会成为问题。 这些都会影响服务的响应时间,从而影响整个应用程序的性能。

为了解决这些问题,我们应该在系统中引入数据库缓存。

什么是缓存

缓存是计算机科学中的一种技术,用于将经常访问的数据存储在临时存储区(称为缓存)中,以减少硬盘驱动器的读写次数。 我们的计算机有一个缓存,浏览器有一个缓存,Web服务器有一个缓存,本文也是从缓存中检索的。缓存无处不在,这种技术可以使您的Web应用程序的性能飞速增长。

工作原理

用户请求您的服务时。 Web服务器首先读取或写入数据库,然后返回响应。 对于缓存,服务器首先检查缓存副本是否存在,如果存在,它将从缓存中返回数据,而不是询问数据库。 它节省了时间和数据库的计算量。

示例应用程序

让我们构建一个简单的网络服务应用程序,该应用程序公开一个API以从MongoDB数据库中读取数据。

让我们开始一个新的项目。

然后运行此命令创建一个Node项目。

让我们下载依赖项。

Node dependencies

主要代码

app.js代码

models.js代码

运行代码并检查其工作情况。

结果

Redis缓存

添加Redis Cache让我们在代码中添加Redis缓存。

更新后的 models.js

在getArticle函数中代码中,我们正在使用ID参数检查缓存是否存在。 如果确实存在,我们将不做进一步处理就返回数据。 如果缓存不存在,我们将在MongoDB中查找该数据并将其添加到缓存中(如果找到)。逻辑很简单并且可以正常工作。再次运行该应用程序并检查工作情况。

保持缓存更新

缓存存在多长时间? 当有新的或更新的数据时会发生什么? 引入缓存时,我们需要解决这样的问题。保留缓存的时间取决于系统。 我将缓存保留了24小时,然后再次对其进行了重建。 根据数据的更新频率,您可能需要1个小时或100个小时。更新数据时,我们只需更新Redis缓存或从Redis中删除条目即可让系统重建缓存。

缓存策略

上面显示的代码库是基本的缓存系统。 不建议将所有内容都放在缓存中,这也会减慢系统速度。 我们只应将这些数据放入对“最受欢迎的文章”有很高要求的缓存中。Redis内置了各种缓存策略,我建议使用LRU(最近最少使用)缓存策略。 此策略将删除最近最少使用的缓存项。启动Redis时,可以将算法作为参数传递。

总结

在本文中,我们研究了缓存及其如何在构建高性能系统中使用。 数据库缓存是一个了不起的概念,越来越多的系统都在使用缓存。

0