본문 바로가기
내일배움 정리/JS 문법 공부

Nestjs에서 Valkey 쓰기 - *.service.ts

by GREEN나무 2025. 2. 22.
728x90

 

1. 기본적인 CRUD 기능

1) 생성 (set)

await valkeyService.set('user:123', { name: 'Alice', age: 25 }, 3600); 
  • key: user:123
  • value: { name: 'Alice', age: 25 }
  • expiryInSeconds: 3600초 (선택사항, 생략 가능)

2) 단일 조회 (get)

const user = await valkeyService.get<{ name: string; age: number }>('user:123');
console.log(user); // { name: 'Alice', age: 25 }
  • key를 사용해 데이터를 가져옴.
  • JSON.parse로 변환하여 객체 형태로 반환.

3) 복수 조회 (리스트 활용)

await valkeyService.rpush('users', JSON.stringify({ name: 'Alice' }));
await valkeyService.rpush('users', JSON.stringify({ name: 'Bob' }));
const users = await valkeyService.lrange('users', 0, -1);
const parsedUsers = users.map((u) => JSON.parse(u));
console.log(parsedUsers);
  • rpush: 리스트 끝에 추가.
  • lrange: 0부터 -1까지 전체 리스트 조회.
  • 결과는 JSON 문자열이므로 JSON.parse 사용.

4) 수정 (set)

await valkeyService.set('user:123', { name: 'Alice', age: 26 });
  • 기존 데이터 위에 덮어쓰기 방식.

5) 삭제 (del)

await valkeyService.del('user:123');
  • 해당 key 삭제.

2. 리스트 관련 연산

1) 리스트 요소 추가

await valkeyService.rpush('tasks', JSON.stringify({ id: 1, title: 'Task 1' }));
await valkeyService.rpush('tasks', JSON.stringify({ id: 2, title: 'Task 2' }));
  • tasks 리스트에 JSON 형태로 저장.

2) 리스트 길이 확인

const length = await valkeyService.llen('tasks');
console.log(length); // 2
  • llen: 리스트 길이 반환.

3) 리스트 조회

const tasks = await valkeyService.lrange('tasks', 0, -1);
const parsedTasks = tasks.map((t) => JSON.parse(t));
console.log(parsedTasks);
  • lrange: 전체 리스트 조회.
  • JSON 문자열을 객체로 변환.

4) 리스트에서 첫 번째 요소 가져오기 (삭제 포함)

const task = await valkeyService.lpop('tasks');
console.log(task); // 첫 번째 Task 객체
  • lpop: 첫 번째 요소 가져오면서 삭제.

3. 서비스 관련 추가 설명

  1. Redis 클라이언트 설정
    • host: localhost (Docker 환경에서는 valkey 변경 가능)
    • port: 6379
    • password: .env에서 설정 가능
  2. JSON 변환 (JSON.stringify, JSON.parse)
    • Redis는 기본적으로 문자열을 저장하므로, 객체는 JSON 형태로 변환 후 저장해야 함.
  3. 메모리 관리 (onModuleDestroy)
    • this.client.quit();을 통해 서비스 종료 시 Redis 연결 종료.