使用redis作为node.js应用程序的缓存
redis是一种内存数据结构存储,用作分布式,内存中的键值数据库,缓存和消息代理。它可以用作分布式缓存来加快应用程序。缓存是一种用于将定期使用的数据存储在空间中的技术要比每次向数据库提出请求要少的时间。
node.js是一种开源,跨平台,JavaScript运行时,用于构建可扩展的Web应用程序。 node.js应用程序大多数是io-bound,因为它们大多数时候都处理I/O操作。只要有效地使用它,缓存就可以显着提高node.js应用程序的性能。
本教程将讨论如何将Redis用作Node.js应用程序的缓存。它涵盖了启动redis服务器并将其与node.js应用程序一起使用的步骤。我们将构建一个简单的node.js应用程序,并展示如何使用redis来缓存应用程序的数据,从而提高其性能。
先决条件
开始之前,您需要安装以下内容:
创建示例node.js应用程序
为了演示如何将redis用作node.js应用程序的缓存,我们将创建一个简单的node.js应用程序,该应用程序从PostgreSQL数据库中读取数据。让我们使用以下命令创建名为redis-cache的node.js项目:
$ mkdir redis-cache && cd redis-cache
运行命令npm init以生成默认配置文件poffage.json并通过运行以下命令安装Express和PG模块:
$ npm install express pg --save
在项目的根目录中创建一个文件server.js并输入以下代码:
const express = require("express");
const { Client } = require("pg");
const PORT = 3000;
const HOST = "127.0.0.1";
const connection = {
user: process.env.POSTGRESQL_USER,
password: process.env.POSTGRESQL_PASSWORD
};
const client = new Client(connection);
client.connect();
let getAllUsers = async () => {
try {
let res = await client.query("SELECT * FROM users");
return res.rows
} catch (e) {
throw new Error(e);
}
};
const app = express();
app.get("/users", async (req, res) => {
let users = await getAllUsers();
console.log(users);
res.send(users);
});
app.listen(PORT, HOST);
console.log(`Server running on ${HOST}:${PORT}`);
上面的代码创建了一个快递服务器,该服务器从用户表中检索数据并将其作为响应发送。按照说明here创建用户表并添加一些示例记录。
现在,启动node.js进程并通过运行以下命令来运行示例应用程序:
$ node server.js
设置并启动Redis服务器
准备好Node.js应用程序后,您可以设置并启动Redis服务器。根据您的操作系统从Redis下载page按照您的操作系统进行说明进行安装并启动REDIS服务器。
将node.js应用程序连接到redis服务器
将REDIS服务器启动并运行后,您可以将Node.js应用程序连接到REDIS服务器。 Node.js提供了用于管理REDIS数据库的各种模块。对于本教程,我们将使用node-redis。要安装模块,请在项目的根目录中运行下面的命令:
$ npm install redis --save
安装了模块后,请在服务器的顶部需要它,并将连接信息提供给redis服务器。
const redis = require("redis");
const redisPort = 6379;
const redisHost = "127.0.0.1";
const redisClient = redis.createClient({
port: redisPort,
host: redisHost
});
将redis用作node.js应用程序的缓存
现在已经设置了REDIS服务器并连接了Node.js应用程序,我们将使用Redis作为应用程序的缓存。我们将在REDIS中设置一个密钥/值对,并通过应用程序的响应响应,并在应用程序中添加一个缓存层,以检查REDIS存储中数据是否存在。如果在REDIS缓存中找到数据,则将其作为响应发送,否则,该应用程序将从PostgreSQL数据库中获取数据。
在将缓存层添加到应用程序之前,我们将添加代码以将数据从PostgreSQL数据库中获取后将数据存储在Redis服务器中。修改GetAllusers()函数如下:
let getAllUsers = async () => {
try {
let res = await client.query("SELECT * FROM users");
let users = res.rows;
redisClient.set(
"users",
JSON.stringify(users)
);
return users;
} catch (e) {
throw new Error(e);
}
};
它将PostgreSQL数据库中的响应存储为针对关键用户的JSON字符串。
让我们将缓存层添加到 /用户路由。定义函数checkCache(),该函数将检查数据是否存在于Redis商店中。
let checkCache = (req, res, next) => {
redisClient.get("users", (err, data) => {
if (err) {
return next(err);
}
if (data !== null) {
res.send(JSON.parse(data));
} else {
next();
}
});
};
它检索了针对关键用户存储的值,并将其发送为响应。如果它在Redis商店中找不到数据,它将调用Next()函数。
在实际 /用户路由之前调用checkcache()函数。
app.get("/users", checkCache, async (req, res) => {
let users = await getAllUsers();
console.log(users);
res.send(users);
});
现在,运行应用程序并访问端点以测试缓存层。
$ node server.js
如果数据存在于Redis Store中,则应用程序将从Redis Store返回数据。否则,它将从PostgreSQL数据库中获取数据。
现在,我们将Redis作为Node.js应用程序的缓存,我们的应用程序将受益于Redis Server提供的性能提升。
结论
redis是一个功能强大且可扩展的解决方案,用于node.js应用程序使用的缓存数据。很容易与Node.js应用程序进行设置并集成并提高应用程序的性能。我们看到了如何将redis用作node.js应用程序的缓存。