팀 프로젝트 진행하면서 사용한 Redis 적용기에 관한 내용입니다.
적용을 진행하면서 정리와 Redis 개념과 설명, 작성한 코드의 설명에 대한 정리한 글입니다.
→ Redis(Remote Dictionary Server) = in-memory 데이터 저장소
간단 설명
→ 다른 데이터 저장소보다 속도면에서 우수하고 다양한 기능을 제공한다는 장점데이터베이스, 캐시, 메시지 브로커 및 대기열로 사용
왜 속도가 우수한가?
→ Redis 데이터는 메모리에 상주한다. 즉, 데이터를 찾으려 디스크까지 접근할 필요가 없으므로 속도면에서 강점을 갖는 것이다.
장점
In-memory 데이터 저장소: 디스크에 데이터를 저장하는 다른 데이터베이스들(PostgreSQL, MongoDB 등)과 달리 데이터를 메모리에 위치시킴으로서 속도면에서 우위를 점함.
유연한 데이터 구조: Key-Value 구조이외에도 다양한 데이터 구조를 지원한다.
단순성 및 사용 편의성
복제 및 지속성
높은 가용성 및 확장성(Scale-up, Scale-out)
→ 고가용성은 시스템이 지속적으로 작동 가능, 중단 없이 사용자에게 서비스를 제공할 수 있는 능력
확장성: 오픈 소스인 만큼 공급업체 기술 종속적이지 않음
단일 쓰레드 환경
→ 한번에 1개의 명령어만 실행할 수 있다는 의미
좋아요 여부 판별하지 않는 경우 한 유저가 한 책에 대해 지속적으로 좋아요
요청 시 값이 무한정 증가하는 문제가 발생
→ 로그인 한 유저가 “좋아요”를 누른 책에 이전 “좋아요” 여부를 판별하기 위해서 사용
→ 만일 한 책에 대해 많은 유저가 좋아요를 누른 경우 빠른 판단을 위해 Redis를 사용하기 했다.
위의 상황에서 “좋아요” 기능에서 유저의 “좋아요” 여부를 판별하는 것이 중요합니다 따라서 신뢰성과 가용성을 향상시키는 것이 중요해서 클러스터를 사용하게 되었습니다.
→ Redis 클러스터 모드에서는 여러 Redis 인스턴스를 클러스터로 묶어 가용성과 분산 제공, 여러 노드에 분산 저장되어서 노드의 장애가 전체 시스템에 영향을 미치지 않음
클러스터 사용 환경