써먹는 웹개발
[Node.js] redis로 데이터 기억하는 cache aside pattern api 호출 본문
728x90
반응형
1. 환경설정
.env 파일에 추가
REDIS_HOST= REDIS_PORT=19882 REDIS_USERNAME=default REDIS_PASSWORD= |
2. Redis 연결
const express = require('express'); const dotenv = require('dotenv'); const redis = require('redis'); dotenv.config(); // env 환경변수 파일 가져오기 //* Redis 연결 // redis[s]://[[username][:password]@][host][:port][/db-number] const redisClient = redis.createClient({ url : `redis://${process.env.REDIS_USERNAME}:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/0`, legacyMode: true, // 반드시 설정!! }); redisClient.on('connect', () => { console.info('Redis connected!'); }); redisClient.on('error', (err) => { console.error('Redis Client Error', err); }); redisClient.connect().then(); // redis v4 연결 (비동기) const redisCli = redisClient.v4; // 기본 redisClient 객체는 콜백기반인데 v4버전은 프로미스 기반이라 사용 |
3. cache aside pattern의 api 호출 ★
- redis(캐시 메모리)에 데이터가 있으면 그대로 반환하고 아니면 DB 조회
app.get('/get', async (req, res) => { let value = await redisCli.get(req.key); // redis get key를 한다. if (value) { // 만약 redis(캐시 메모리)에 데이터가 있다면 그대로 반환 -> Cache Hit res.send(value); } else { // 만약 redis(캐시 메모리)에 데이터가 없다면 DB에서 조회 -> Cache Miss let data = await sequelize.query('SELECT data FROM tables where id = key'); await redisCli.set(key, data); // 그리고 그 데이터를 캐시에 저장하고 반환 res.send(value); } }); |
3-2. api 호출 소스 중복 제거
app.get('/get', async (req, res) => { let value = await redisCli.get(req.key); // redis get key를 한다. if (!value) { // 만약 redis(캐시 메모리)에 데이터가 없다면 DB에서 조회 -> Cache Miss let data = await sequelize.query('SELECT data FROM tables where id = key'); await redisCli.set(key, data); // 그리고 그 데이터를 캐시에 저장하고 반환 } res.send(value); }); |
728x90
반응형
'Server > Node.js' 카테고리의 다른 글
[Node.js] 암호화/복호화 (0) | 2023.04.24 |
---|---|
[Node.js] 서버 DB로 사용할 mongoDB url 가져오기 (0) | 2023.03.29 |
[Node.js] 무료 배포 서버인 cloudtype 배포방법 (0) | 2023.03.24 |
[Node.js] 동기처리 안되는 현상 수정 (0) | 2023.03.07 |
[Node] 인터페이스를 객체 생성하여 사용하기 (0) | 2023.01.30 |
Comments