Redis
- Remote Dictionary Server의 약자
- 키-값 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템
- 인메모리에 모든 데이터를 저장
주요 사용
- 캐싱
- 세션 관리
- 실시간 분석 및 통계
- 메시지 큐
- 지리공간 인덱싱
- 속도 제한
- 실시간 채팅 및 메시징
기본 명령어
- set ryu:name "ryu ryu"
- set ryu:hobby guitar
- keys *
- del ryu:name
- set ryu:pet dog ex 30 => TTL 정하기
- flushall => 모든 데이터 삭제
Key 네이밍 컨벤션
- 콜론 ":" 을 활용해 계층적으로 의미를 구분해서 사용
- users:100:profile => 사용자들 중에서 PK가 100인 사용자의 프로필
데이터를 캐싱할 때 사용하는 전략
Cache Aside (=Look Aside, Lazy Loading) 전략
- 데이터를 조회할 때 주로 사용하는 전략
- 캐시에 데이터가 있을 경우 (=Cache Hit)
- 캐시에 데이터가 없을 경우 (=Cache Miss)
- 캐시에서 데이터를 확인하고, 없다면 DB를 통해 조회해오는 방식
Write Around 전략
- 데이터를 어떻게 쓸지에 대한 전략
- 데이터를 저장할 때는 레디스에 저장하지 않고 데이터베이스에만 저장하는 방식
- 그러나 데이터를 조회할 때 레디스에 데이터가 없으면 데이터베이스로부터 데이터를 조회해서 레디스에 저장시켜주는 방식
- 즉, 쓰기작업을 캐시에는 반영하지 않고, DB에만 반영하는 방식
Cache Aside, Write Around 전략의 한계
- 캐시된 데이터와 DB 데이터가 일치하지 않을 수 있다
- 데이터 일관성을 보장할 수 없음
- 캐시에 저장할 수 있는 공간이 비교적 작다
극복방법
- 캐시를 적용시키기에 적절한 데이터 선정
- 자주 조회되는 데이터
- 잘 변하지 않는 데이터
- 실시간으로 정확하게 일치하지 않아도 되는 데이터
- 적절한 주기로 데이터를 동기화 (TTL)
- TTL을 활용하면 자주 조회되지 않는 데이터는 만료시간에 의해 데이터가 삭제되게 할 수 있다
조회 성능 개선
- SQL 튜닝
- 캐싱 서버 활용 (Redis 등)
- 래플리케이션 (Master/Slave 구조)
- 사딩
- DB 스케일업
- 많은 성능 개선 방법 중 SQL 튜닝을 제일 먼저 해야함
- SQL을 제외한 나머지 방법은 추가적인 시스템을 구축해야 한다.
따라서 금전적, 시간적 비용이 추가적으로 발생한다 - SQL 튜닝은 기존의 시스템 변경 없이 성능을 개선할 수 있다
- SQL을 제외한 나머지 방법은 추가적인 시스템을 구축해야 한다.
- 근본적인 문제를 해결하는 방법이 SQL 튜닝일 가능성이 높다
- SQL 자체가 비효율적으로 작성됐다면 아무리 시스템적으로 개선한다고 하더라도 한계가 있따