NestJS Redis를 이용하여 캐시(Cache) 관리 mset, mget
이전 글에서는 하나의 키와 값을 저장하거나 하나만 조회를 했습니다. 이번에는 여러개의 키값을 이용하여 값을 저장하거나 조회하는 비즈니스 로직을 작성하도록 하겠습니다.
아래 링크를 참고하시면 NestJS와 Redis를 연결하고 사용하는 방법에 대해서 알수 있습니다.
NestJS Redis를 이용하여 캐시(Cache) 관리
redis가 Local에 설치되지 않을시 해당 'docker-compose.yaml'을 사용하여 redis컨테이너를 생성하면 됩니다.
// 여러개의 keys값과 values를 저장하기 위한 서비스
async saveDataMany(key: string[], value: any[]) {
try {
const setKeysValues: any[] = [];
if (key.length === value.length) {
// mset을 하기 위해서 [key, value]
for (let i = 0; i < key.length; i++) {
setKeysValues.push(key[i]);
setKeysValues.push(value[i]);
}
} else {
throw new ConflictException('key와 value갯수가 일치하지 않음');
}
console.log('setKeysValues : ', setKeysValues);
// ttl이 설정되지 않는다면 기본 5초간 유지되고 사라진다. 0은 무제한
const result = await this.cacheManager.store.mset(...setKeysValues, {
ttl: 0,
});
console.log('result : ', result);
return result;
} catch (err) {
throw new HttpException(err.message, err.status ? err.status : 500);
}
}
// 여러개의 키값을 조회하기 위한 서비스
async getDataMany(key: string[]) {
try {
const result = await this.cacheManager.store.mget(...key);
console.log('result : ', result);
if (!result) {
throw new NotFoundException('데이터가 존재하지 않습니다.');
}
return result;
} catch (err) {
console.log('Error :', err);
throw new HttpException(err.message, err.status ? err.status : 500);
}
}
위의 2 코드를 해당 파일(src/redis_crudredis_crud.service.ts)에 추가합니다.
이제 해당 디렉토리(docker-compose.yaml 존재 경로)에서 아래 CLI를 실행하여 redis 컨테이너를 생성합니다.
$ docker-compose up -d
해당 CLI의 끝에 -d는 detatch모드 입니다.
API POST /redis-crud를 이용하여 여러개의 key값과 value를 redis에 저장할수 있습니다.
API POST /redis-crud/get/keys를 이용하여 여러개의 key값을 입력하여 해당 value값을 얻을수 있습니다.
댓글
댓글 쓰기