[캐싱] Redis Cache

Dragon_Tack·2023년 12월 4일
0
post-thumbnail
$ npm i --save ioredis

Redis - 캐시(Cache) 전략

캐싱 전략은 웹 서비스 환경에서 시스템 성능 향상을 기대할 수 있는 중요한 기술이다.
일반적으로 캐시(cache)는 메모리(RAM)를 사용하기 때문에 데이터베이스 보다 훨씬 빠르게 데이터를 응답할 수 있어 이용자에게 빠르게 서비스를 제공할 수 있다.

하지만 기본적으로 RAM의 용량은 커봐야 16 ~ 32G 정도라, 데이터를 모두 캐시에 저장해버리면 용량 부족 현상이 일어나 시스템이 다운 될 수 있다.
따라서 어느 종류의 데이터를 캐시에 저장할지, 얼만큼 데이터를 캐시에 저장할지, 얼마동안 오래된 데이터를 캐시에서 제거하는지에 대한 '지침 전략' 을 숙지할 필요가 있다.

캐시에 저장할 데이터 유형

어떤 유형의 데이터가 가장 많은 이점을 얻을 수 있는지를 이해하는 것이 중요하다. 중요하고 빈번하게 액세스되는 데이터는 캐싱에 적합하며, 덜 자주 사용되거나 정적인 데이터는 캐싱이 필요하지 않을 수 있다.

캐시 크기 관리

램의 한계가 있기 때문에 캐시의 크기를 주의 깊게 관리하는 것이 중요하다. 성능을 향상시키기 위해 충분한 데이터를 캐시에 저장하면서도 메모리를 과도하게 사용하지 않는 균형을 유지하는 것이 핵심이다.

캐시 만료 정책

데이터가 캐시에 얼마 동안 유지되어야 하는지에 대한 명확한 정책을 수립하는 것이 중요하다. 데이터의 성격과 응용 프로그램 요구 사항에 따라 만료 정책을 구현하는 것이 좋다.

config setting

import { configDotenv } from 'dotenv';
configDotenv();

export const redisConfig = {
	host: process.env.REDIS_HOST,
	port: parseInt(process.env.REDIS_PORT),
	password: process.env.REDIS_PASSWORD,
};

repositoy setting

import Redis from 'ioredis';
import { Injectable } from '@nestjs/common';
import { redisConfig } from 'src/config/redis.config';

@Injectable()
export class RedisRepository {
	private readonly redisClient: Redis;

	constructor() {
		this.redisClient = new Redis(redisConfig);
	}

	async get(key: string) {
		return this.redisClient.get(key);
	}

	async set(key: string, value: string) {
		return this.redisClient.set(key, value);
	}
	
	async del(key:string){
	return this.redisClient.del(key)

}

scan

하나씩 호출하는거 보다 단체로 집계하거나 할때 비용적으로 처리하기 좋음

const { cursor: newCursor, keys } =
await this.nodeRedisProvider.scan(cursor, { MATCH: scanPattern });

다중삭제

data.map((x) => {
    multi.del(
          this.key(
            x.id
            x.space
            x.user
          ),
        );
   

정성들여 쓸시간이없넹 일단그래도 관심사여서 읽어보며, 간단한 세팅방법만 두고 글을 마무리 지어야겠다. 이거나중에 읽어봐야징

https://docs.nestjs.com/microservices/redis

profile
고민의 흔적을 늘여놓는 공간

0개의 댓글