Server/Node.js
[Node.js] redis로 데이터 기억하는 cache aside pattern api 호출
kmhan
2023. 3. 30. 13:59
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
반응형