Redis repository

Jaa-van·2023년 5월 19일
0
post-thumbnail

Remote Dictionary Server

  1. NoSql 데이터 이다 => 관계형 데이터베이스인 MySql 등과 다르게 primary key, foreign key 처럼 스키마가 고정되어있지 않다
  2. NoSql 중에서 key-value stroe 타입니다 => 메모리 기반으로 빠르게 데이터를 읽어올 수 있다는 장점이 있다
  3. Key 로 올 수 있는 자료형은 기본적으로 String, Value 는 다양한 타입을 지원한다
  4. 메모리 기반의 데이터베이스 이기 때문에 RDBMS 보다 read 가 빠르다

npm install -g redis-cli

redis repository

3 계층 구조를 사용할 경우 직접적으로 db 에 닿아있는 repository 에 redis 를 관리하게 된다.

생성자 (constructor) 를 통해서 repository 를 불러올 때 redis 와 연결해준 후 메서드 들을 통해 get, set, delete 를 수행할 수 있다. 각 메서드에는 initialize() 메서드가 담겨있어 redis 와 connect 할 수 있다


const redis = require("redis");
const sequelize = require("sequelize");
require("dotenv").config();

class RedisClientRepository {
  constructor() {
    this.redisClient = redis.createClient({
      url: `redis://${process.env.REDIS_USERNAME}:${process.env.REDIS_PASSWORD}@${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/0`,
      legacyMode: true,
    });

    this.redisConnected = false;
  }

  initialize = async () => {
    this.redisClient.on("connect", () => {
      this.redisConnected = true;
      console.info("Redis connected!");
    });

    this.redisClient.on("error", (error) => {
      console.error("Redis Client Error", error);
    });

    if (!this.redisConnected) {
      this.redisClient.connect().then();
    }
  };

  setRefreshToken = async (refreshToken, email) => {
    await this.initialize();
    await this.redisClient.v4.set(refreshToken, email);
  };

  getRefreshToken = async (refreshToken) => {
    await this.initialize();
    return await this.redisClient.v4.get(refreshToken);
  };

  deleteRefreshToken = async (refreshToken) => {
    await this.initialize();
    await this.redisClient.v4.del(refreshToken);
  };
}

module.exports = RedisClientRepository;

0개의 댓글