[NestJS] Redis를 이용한 Cache 구현

hahaha·2021년 9월 8일
0

NestJS

목록 보기
9/11
post-thumbnail

Redis(Remote Dictionary Server)

  • 메모리 키-값 데이터 구조 스토어
  • in-memory 데이터 저장소
  • 다양한 데이터 구조 제공
    - String, Set, Sorted Set, Hash, List 지원
  • NoSQL or RDBMS의 캐시 솔루션으로 불림
  • 사용 사례: 캐싱, 세션 관리, 대기열, 실시간 순위표 등
  • 메모리 기반 저장소이므로 필요한 정보를 빠르게 처리할 수 있음
    - DB에는 데이터를 영속적으로 관리가 가능하지만, 입출력 시간 소요
    - 전체 데이터 저장보다는 캐시처럼 휘발성/임시성을 띄는 데이터 저장에 많이 사용됨

Memcached

: Redis와 자주 비교되는 in-memory 저장소

Memcached와 Redis 비교

MemcachedRedis
메모리에 데이터 저장메모리 + Disk에 저장(데이터 복구 가능)
문자열만 지원다양한 데이터 형식 지원
메모리 재사용메모리 재사용 X
싱글 스레드멀티 스레드
캐시 용량 큼캐시 용량 비교적 작음
  • 이 둘의 성능차이는 미비
    redis로 통일해서 사용하는 것이 관리 및 확장성 측면에서 좋다...

Amazon ElastiCache for Redis

AWS docs - Amazon ElastiCache for Redis

  • 클라우드에서 분산된 인 메모리 데이터 스토어 또는 캐시 환경을 쉽게 설정, 관리 및 확장할 수 있는 웹 서비스
  • Memcached 캐시 엔진도 지원

- 자세한 내용 별도로 포스팅 예정
- 구축 방법, 구성(클러스터, 샤딩 등), 관리

Caching(in NestJS)

NestJS docs - Caching

1. 캐시 모듈 생성

  • app.module.ts에 바로 imports도 가능
  • app.module.ts에 생성한 캐시 모듈 imports 필수
// redis-cache.module.ts
import { CacheModule, Module } from '@nestjs/common';
import * as redisStore from 'cache-manager-redis-store';

const cacheModule = CacheModule.registerAsync({
  useFactory: () => ({
    store: redisStore,
    host: process.env.REDIS_HOST,
    port: process.env.REDIS_PORT,
    ttl: 0,
  }),
});

@Module({
  imports: [cacheModule],
  exports: [cacheModule],
})
export class RedisCacheModule {}

store

ttl(Time To Live)

  • 캐시 만료시간(s)
  • default: 5
  • 캐시 만료 비활성화: ttl:0
  • 캐시의 특정 키에 대해 TTL 별도 설정도 가능
await this.cacheManager.set('key', 'value', { ttl: 1000 });

2. 캐시 저장소와 상호작용하기

// 캐시 관련 로직을 포함하는 파일
import { CACHE_MANAGER, Inject, Injectable } from '@nestjs/common';
import { Cache } from 'cache-manager';

@Injectable()
export class CacheService {
  constructor(
    @Inject(CACHE_MANAGER) private readonly cacheManager: Cache,
  ) {}
  
  // 캐시에 항목 추가
  await this.cacheManager.set('key', 'value');

  // 캐시의 특정 항목 검색
  const value = await this.cacheManager.get('key');
}
  • CACHE_MANAGER토큰을 사용하여 캐시 관리자 인스턴스와 상호작용

redis-cli 이용하기

Redis 설치

$ brew install redis

redis 실행

$ brew services start redis

redis 서버 실행

$ redis-server

서버 정상 실행 모습

redis 서버 접속

$ redis-cli
// redis-cli -h localhost -p 6380

간단한 테스트

redis 서버 응답 테스트

$ redis-cli ping
// 'PONG' 으로 응답이 오면 서버 정상작동
profile
junior backend-developer 👶💻

0개의 댓글