key- value 형태로 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 DBMS
DB, 캐시, 메세지 브로커로 사용
인메모리 데이터 구조를 가진 저장소
고성능 키-값 저장소로서 String, list, hash, set, sorted set 등의 자료 구조를 지원하는 NoSQL
Redis 사용이유
데이터 베이스가 있음에도 불구하고 Redis 즉, 인모메리 데이터 구조 저장소를 사용함 DB는 데이터를 디스크에 직접 작성하여 서버에 문제가 발생하더라도 데이터 손실이 되지 않음 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 증가할 경우 부하가 많아져 느려질 수가 있음 이렇게 DB 과부하가 될 수 있는 상황 떄문에 캐시 서버를 도입하여 사용함 그리고 이 캐시 서버로 이용할 수 있는 것이 Redis
특징
Key, Value 구조이기 때문에 쿼리 사용할 필요가 없음
데이터를 디스크가 아닌 메모리에서 처리하여 속도가 빠름
영속성을 지원하는 인 메모리 데이터 저장소
다양한 자료 구조를 지원
싱글 스레드 방식으로 인해 연산을 원자적으로 수행이 가능
읽기 성능 증대를 위한 서버 측 리플리케이션을 지원
쓰기 성능 증대를 위한 클라이언트 측 샤딩 지원
다양한 서비스에서 사용되며 검증된 기술
장점
리스트, 배열과 같은 데이터를 처리하는데 유용
value 값으로 다양한 데이터 형식을 지원하기 때문
리스트형 데이터 입력과 삭제가 MySql에 비해 10배정도 빠름
여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청하는 경우, 데이터 부정합 방지 Atomic 처리 함수를 제공
원자성
메모리를 활용하면서 영속적인 데이터 보존
명령어로 명시적 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않음
스냅샷 기능을 제공해 메모리 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구가능
AOF : Redis의 모든 Wirte/Update 연산을 log 파일에 기록 후 서버 재시작 시 순차적으로 재실행, 데이터 복구
1개의 싱글 쓰레드로 수행되기 때문에, 서버 하나에 여러개의 Redis Server를 띄울 수 있음
Redis 주의점
서버에 장애가 발생했을 경우 그에 대한 운영 플랜이 필요
인메모리 데이터 저장소의 특성상, 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있기 때문
Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬됨 이를 통해 손쉽게 동적 순위표를 생성하여 게임에서 앞서있는 사람이 누구인지 보여주거나, 좋아요를 가장 많이 받은 메시지를 게시하거나, 선두에 있는 사람이 누구인지 보여주려는 다양한 사례에 사용할 수 있음
Redis는 이벤트 속도를 측정하고 필요한 경우 제한할 수 있음 클라이언트의 API 키에 연결된 Redis 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있음 속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용됨