用Express App实现缓存

582 阅读4分钟

照片:Maria BobrovaonUnsplash

你有没有觉得你应该快一点,在性能上好一点,但有些事情你无法控制,对吗?但如果你把你的数据处理从终端移除,那肯定会节省你的时间。缓存作为一种救援手段出现了,你可以将数据存储在RAM中,每当需要的时候,它就会迅速的出现,原因很简单,缓存是从RAM中提供服务,而不是从磁盘内存中。但问题是,我们应该把所有的东西都缓存起来吗?让我们来详细讨论一下这个问题。

什么是缓存?

每当我们使用任何数据集/数据库的时候,它都会从磁盘内存中提供服务,并使用内部排序机制,即索引,以加快响应时间,但可能会有这样的情况:数据量很大,磁盘处理会占用一些时间。那么作为一个软件人员,我们应该推荐缓存作为解决方案之一,它将数据存储在RAM中,每当需要的时候,它就从那里提供服务,而不是磁盘。下面是这个概念的一个视觉表现。

缓存结构

在哪里使用?

这取决于使用情况,但大部分的缓存都是通过静态或相同的数据来传递给用户。个性化的内容不适合存储在缓存机制中,因为它在每次请求时都会改变。

如何使用它?

我使用节点来演示_Redis_的缓存流程,还有其他一些选择,如_Memcached_、_Mongo_或任何键值对数据集等等。我将使用这个repo作为启动器,你可以切换分支,进入我上一篇关于基于角色的访问的文章,就像一个专家。这篇文章的全部代码可以在同一个 repo 上的分支缓存中找到。你可以通过运行以下程序打开服务器 npm run dev/ node index.

为了给你演示这个功能,我创建了一个名为MockDatabase 的类,每当我们调用该类的get方法时,它将在3秒内给我们一些数据。

mock database method

这里是我们使用的模拟类的代码,这将帮助我们保持基地的奇异性。_get_方法将给我们数据,而_wait_方法将让我们在这里创造我们想要的延迟。

接下来,我们将更新路由,为了本文的目的,我创建了两个路由/有缓存和/无_缓存_,这将帮助我们了解每个路由的时间延迟。

不要担心,你可以在文章的顶部和底部找到整个源代码和repo链接。

现在,更新路由的控制器,调用我们之前创建的DB来获取。

我们现在调用完全相同的代码到这两个函数。

路由的控制器函数

现在,如果你移动到任何路线,你会看到以下结果,但有3秒的延迟。

注意红框内的高亮区域,你可以看到延迟的情况。

现在要在我们的小应用程序中整合缓存。我们将使用Redis包来缓存我们的数据。

首先,你需要下载Redis并在本地安装,要在本地安装Redis包中使用它,写命令 npm i redis

并像这样用缓存控制器更新它们。

不要忘记在顶部导入Redis。

在这个片段中,如果你看到,我们正在为我在文章最开始使用的图表编写代码。首先,我们要检查Redis是否有数据,如果有,则将其直接发送给客户端,如果没有,则调用数据库并存储,然后用我们用来获取数据的相同密钥将数据发送给客户端。注意--Redis不直接存储对象,首先我们需要将其字符串化或使其成为缓冲区,如果你想做一些处理,你可以使用JSON解析来使其再次成为JSON。

一旦你这样做了,当你刷新服务器并再次点击请求时,你将再次看到这些变化。

说到这里,我们就结束了,你可以在这个分支找到整个源代码。希望你们喜欢这篇文章并获得一些知识,保重。