[NodeJS] Redis 사용하기

김동욱·2024년 12월 18일

데이터베이스

목록 보기
2/7

Redis란?

Remote Dictionary Server의 약자로서,
'key-value' 구조의 데이터를 저장하고 관리할 수 있는 NoSQL 데이터베이스.

Redis의 이점

  1. 디스크에 데이터를 저장하는 다른 RDBMS와 다르게 레디스는 램(in-memory)에 모든 데이터를 저장하기 때문에 RDBMS를 사용하거나 JSON 파일을 읽고 파싱하는 것에 비해 처리 성능이 매우 빠르다.
  2. 여러 서버에서 동일한 Redis 인스턴스를 참조하면서 일관된 데이터를 공유할 수 있다.
  3. 데이터를 Redis에 캐싱하면 불필요한 데이터 로드 과정을 줄일 수 있다.
  4. Redis에 저장된 데이터를 쉽게 업데이트할 수 있다.

Redis의 단점

inMemory 방식이기 때문에 데이터 휘발 가능성이 있다. 서버 컴퓨터가 꺼지면 데이터도 날아간다.

Redis의 사용 사례

주로 캐싱(Caching, 데이터 조회 성능 향상) 용도로 사용

  • 캐싱
  • 채팅, 메시징 및 대기열
  • 랭킹 보드(순위표)
  • 인증 토큰 저장(세션 스토어)
  • 다양한 미디어 스트리밍
  • 실시간 분석
  • 위치기반 데이터 타입 사용
  • 게임 세션 정보 저장(사용자 재접속 후에도 게임 빠르게 이어서 하기)

NodeJS에서 Redis 연동

  1. redis를 설치한다.
    npm istall redis

  1. redis 클라우드에서 데이터베이스를 만들고
    호스트 주소, 포트 번호, 비밀번호를 알아낸다.

  1. vscode에서 redisClient를 초기화하고 Redis에 연결하는 코드를 작성한다.
import { createClient } from 'redis';

// Redis 클라이언트 생성
const redisClient = createClient({
    url: 'redis://default:<비밀번호>@<호스트 주소>:<포트번호>',
});

// 이벤트 리스너 설정
redisClient.on('connect', () => {
    console.log('Redis에 연결되었습니다!');
});

redisClient.on('error', (err) => {
    console.error('Redis 연결 오류:', err);
});

  1. Redis에 데이터를 저장할 때
const redisSet = async () => {
    try {
        await redisClient.connect();

        await redisClient.set('key', 'value');

        await redisClient.quit();
    } catch (err) {
        console.error('오류 발생:', err);
    }
});
redisSet();

  1. Redis에서 데이터를 읽어올 때
const redisGet = async () => {
    try {
        await redisClient.connect();

		const val = await redisClient.get('key')
        console.log('key:', val);

        await redisClient.quit();
    } catch (err) {
        console.error('오류 발생:', err);
    }
});
redisGet();

  1. Redis에 json 형태를 저장할 때는 string으로 바꿔줘야 한다.
    반대로 Redis에서 데이터를 읽어와서 json 형태로 저장하고 싶으면 json으로 파싱해야 한다.
await redisClient.connect();
await redisClient.set('gameAssets', JSON.stringify(gameAssets));
gameAssets = JSON.parse(await redisClient.get('gameAssets'));
await redisClient.quit();
profile
갓겜만들어야지

0개의 댓글