레디스를 이용해 문제 해결하기
문제
- 유저에게 게시글을 “등록순”이 아닌 “랜덤”하게 노출시켜줘야 함
- 특정 조건을 만족시킨 게시글은 노출되지 말아야 함
- 특정 조건 충족 여부는 1시간 내외로 초기화됨
해결방법
- 특정 조건 충족 상태를 저장
- 게시글 데이터 array 를 랜덤한 숫자로 slice하여 내려주되, 이 중 특정 조건을 만족하는 게시글은 제외
메모리 캐싱이 아닌 레디스를 선택한 이유?
- 데이터 영속성, 서버를 껐다 켜도 캐싱 데이터가 사라지지 않는 점 때문에.
- 도커라이징 할 때, 볼륨을 지정하지않으면 그냥 일반 메모리캐시랑 똑같아진다.
- 사실 연습용 프로젝트에서는 그런거 안써도되는데 그냥 레디스 한 번 써보고싶었다.
레디스 사용의 단점
- Redis의 데이터는 메모리에 저장되므로, 메모리 크기보다 적은 데이터만 저장할 수 있다.
- 복잡한 쿼리가 어렵다
- RDS에서 제공하는 분산 시스템이 없기 때문에 확장성을 얻기 위해서는 여러 인스턴스를 배포하여 사용해야한다.
사용방법
https://docs.nestjs.com/techniques/caching#different-stores
- Redis 저장소를 사용하는 캐시 모듈 설치
npm install cache-manager-redis-store --save
- app.module에 의존성 표기