[Redis] Redis란? Redis의 개념과 특징
Redis란?
- Redis : Remote Dictionary Server
- Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 NoSQL DBMS
- 사용에 따라 데이터베이스로 사용될 수도 있고, Cache Server로 사용될 수도 있음
Redis 사용 이유
- 데이터베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않음
- 하지만 매번 디스크에 접근하기 때문에 사용자가 많아질수록 부하 증가
- 이때 Cache Server를 도입하여 사용하고, Cache Server로 Redis를 이용할 수 있음
- Cache Server 사용 시 같은 요청에 매번 데이터베이스를 거치는 것이 아닌, Cache Server에서 첫 번째 요청 이후 저장된 결과값을 바로 반환
- 데이터베이스 부하 감소 가능, 서비스 속도 향상
Redis의 특징과 장점
- Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없음
- 고정되지 않은 스키마를 가지므로 키마다 원하는 내용만 저장 가능
- In-Memory 데이터베이스
- 매우 빠름
- 서버 재시작 시 모든 데이터 유실
- 복제 기능이 있지만 사람의 실수에는 복원 불가
- 백업이 필요할 수 있음 (persist option 지원)
- 다양한 자료구조를 제공
- String, List, Hash, Set, Sorted Set, Stream 등
- 사용 용이, 개발 편의성 증대
- application 단에서 필요한 로직을 DB 단에서 줄일 수 있음
- list형 데이터 입력/삭제가 MySQL에 비해 10배 빠름
- Single Thread로 동작
- 한 번에 여러 클라이언트의 요청을 수행할 수 없음
- 한 클라이언트가 오래 걸리는 작업을 요청하면 장애가 발생할 수 있음
- 여러 대의 서버 구성 가능 (Master-Slave)
- Database, Cache, Message broker로 사용됨
- Cache로 사용 시 무조건 TTL로 사용. 시간 중요
Redis 장애 포인트
- Redis가 Single Thread임을 무시한 경우
key *
, flush all
커맨드 수행 시 반환 시간동안 다른 응답 불가
- centinel이 주기적으로 ping을 보내 장애 여부를 판단하는데 이때 장애로 판단할 수 있음
keys *
대신 scan 0
커맨드를 사용해야 함
- Hash나 Sort Set에서 데이터를 많이 저장할수록 느려짐
- 하나의 key에 너무 많은 데이터를 저장하지 않도록 한다
- 너무 짧은 timeout 값 설정
- 자주 갱신 되는 값이 아니라면 갱신 시간 늘리기
- PER (Probabilistic Early Recomputation) 알고리즘 도입