Redis를 사용하여 Node.js에서 캐싱 구현
3524 단어 webdevjavascriptredisnode
문제를 설명하겠습니다.
특정 사이트에서 일부 데이터를 스크랩하고 해당 데이터에 대해 무거운 계산을 수행하는 간단한 API가 있습니다.
API 응답이 느리고 사용자에게 좋지 않습니다.
우리는 이 특정 요청이 여러 번 수신될 수 있으며 스크랩한 사이트의 정보가 매시간 업데이트된다는 것을 알고 있습니다.
우리의 솔루션:
캐싱!
다음 시간 동안 첫 번째 응답을 캐시하고 느린 계산을 반복해서 수행하지 않아도 됩니다.
Redis는 이러한 종류의 작업에 완벽한 메모리 데이터 저장소에서 매우 빠릅니다.
구현:
컴퓨터에 Redis가 설치되어 있다고 가정하겠습니다. 그렇지 않은 경우 Redis 문서는 매우 쉽고 이해하기 쉽습니다.
우선 익스프레스로 앱을 시작하겠습니다.
//index.js
const express = require("express");
const app = express();
app.get("/heavy-task",(req, res) => {
const { searchTerm } = req.query;
const result = heavyTask(searchTerm);
res.status(200).json({ result });
});
app.listen(PORT, () => {
console.log("Server is listening on port " + PORT);
});
이제 Redis 클라이언트를 설치하여 앱에서 Redis를 사용하겠습니다.
ioredis
를 사용하겠습니다.cache.js
라는 다른 파일에서 클라이언트를 시작합니다.//cache.js
const Redis = require("ioredis");
const redisClient = new Redis();
redisClient.on("connect", () => {
console.log("Redis connected");
});
redisClient.on("error", (err) => {
console.log("Redis error", err);
})
module.exports = redisClient;
핸들러에서 사용하기 위해
redisClient
를 index.js
로 가져오겠습니다.우리는
SETEX
데이터 저장소에 대한 키, 데이터가 저장소에 있을 시간(초)을 나타내는 숫자, 마지막으로 저장된 데이터를 JSON으로 받아들이는 메서드를 사용할 것입니다.//index.js
const express = require("express");
const redisClient = require("./cache.js");
const app = express();
app.get("/heavy-task",(req, res) => {
const { searchTerm } = req.query;
const result = heavyTask(searchTerm);
const resultJSON = JSON.stringify(result);
redisClient.setex(searchTerm, 3600, resultJSON);
res.status(200).json({ result });
});
app.listen(PORT, () => {
console.log("Server is listening on port " + PORT);
});
엄청난! 이제 데이터는 다음 시간 동안 Redis에 저장됩니다.
이제 요청이 수신될 때마다 실행되는
checkCache
미들웨어를 생성하고 Redis에 searchTerm
(키)가 존재하는지 묻고 그렇다면 데이터를 반환합니다. 그렇지 않으면 next()
.//middleware/checkCache.js
const redisClient = require("../cache.js");
const checkCache = (req, res, next) => {
const { searchTerm } = req.query;
redisClient.get(searchTerm, (err, result) => {
if (err) {
console.error(err);
}
if (result) {
const cachedRes = JSON.parse(result);
return res.status(200).json({cachedRes});
} else {
next();
}
});
};
module.exports = checkCache;
핸들러에서 미들웨어를 구현합니다.
//index.js
const express = require("express");
const redisClient = require("./cache.js");
const checkCache = require("./middleware/checkCache.js");
const app = express();
app.get("/heavy-task",checkCache,(req, res) => {
const { searchTerm } = req.query;
const result = heavyTask(searchTerm);
const resultJSON = JSON.stringify(result);
redisClient.setex(searchTerm, 3600, resultJSON);
res.status(200).json({ result });
});
app.listen(PORT, () => {
console.log("Server is listening on port " + PORT);
});
그게 다야! 이제 우리의 요청은 Redis로 쉽게 캐시됩니다.
이 간단한 가이드가 도움이 되었기를 바랍니다 😄
Reference
이 문제에 관하여(Redis를 사용하여 Node.js에서 캐싱 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/saar120/implement-caching-in-nodejs-with-redis-4b7o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)