Redis 레디스 특징, 장단점, Memcached와 redis 비교
Redis(Remote Dictionary Storage, 레디스)는 모든 데이터를 메모리에 저장하고 조회하는 인메모리 데이터베이스, 메모리 기반의 key-value 구조의 데이터 관리 시스템이다.
📍 레디스 대표적인 특징
모든 데이터를 메모리에 저장하고 조회하기때문에 빠른 Read, Write 속도를 보장하고 또 다양한 자료구조를 지원한다는 점이다.
Redis가 지원하는 데이터 형식
String, Set, Sorted, Set, Hash, List
다양한 자료구조를 지원하게 되면 개발의 편의성이 좋아지고 난이도가 낮아진다.
예를들어 어떤 데이터를 정렬을 해야하는 상황이 있을 때 DBMS를 이용한다면 DB에 데이터를 저장하고 -> 저장된 데이터를 정렬하여 -> 다시 읽어오는 과정은 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다는 단점이 있다. 이 때 In Memory 데이터베이스인 Redis를 이용하고 레디스에서 제공하는 Sorted Set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있다.
서버 복제 지원
Master - slave 구조로, 여러개의 복제본을 만들 수 있다. 데이터베이스 읽기를 확장할 수 있기 때문에 높은 가용성(오랜 시간동안 고장나지 않음) 클러스터를 제공한다.
트랜젝션
트렌젝션이란.. 트랜잭션으로 묶게 되면 트랜잭션 내부에서 하나의 로직이 실패하여 오류가 나게되면 모두 취소시키며 그렇지 않으면 모두 성공시키는 것이다. (아마 이 글을 읽고 있는 사람이라면 이미 알고 있을 것 같지만..) Redis는 이 트랜잭션 기능을 지원한다.
Pub / Sub messaging
Publish(발행)과 Sub(구독)방식의 메시지를 패턴 검색이 가능하다. 따라서 높은 성능을 요구하는 채팅, 실시간 스트리밍, SNS 피드 그리고 서버상호통신에 사용할 수 있다.
메시지들을 queue로 관리하지 않고, publish 하는 시점 기준으로 미리 subscribe 등록 대기 중인 클라이언트들을 대상으로만 메시지를 전달한다.
위치기반 데이터 타입 지원
Redis는 실시간 위치기반데이터를 지원한다. 두 위치의 거리를 찾거나, 사이에 있는 요소 찾기등의 작업을 수행할 수 있다.
싱글스레드
Redis는 싱글 쓰레드이기 때문에, 1번에 1개의 명령어만 실행할 수 있다. (자주 비교되는 맴캐쉬드는 멀티 스레드 지원)
Keys(저장된 모든키를 보여주는 명령어)나 flushall(모든 데이터 삭제)등의 명령어를 사용할 때, 맴캐쉬드의 경우 1ms정도 소요되지만 레디스의 경우 100만건의 데이터 기준 1초로 엄청난 속도 차이가 있다.
즉 하나의 요청이 병목되면 그 다음 요청들이 계속 밀리기 때문에 O(N)관련 명령어를 주의해야한다. O(N)관련 명령어로는 위에서 언급한 Keys, flushall를 포함해 FLUSHDB, Delete COlLECTIONS, Get All Collections가 있다. 큰 컬렉션의 데이터를 다 가져오는 경우 등도 주의하자.
또 RDB 작업(특정 간격마다 모든 데이터를 디스크에 저장)이 매우 오래걸린다. AWS 60기가 메모리 기준으로 10분이나 소요된다고 한다. Redis 장애에 원인의 대부분이 해당 기능 때문에 발생하기 때문에 사용할 때 주의해야한다.
📍 Redis vs Memcached
분류
|
Redis
|
Memcached
|
처리속도
|
데이터가 디스크와 메모리에 저장되는데 Memcached와 성능 차이가 없음, 빠름
|
데이터가 메모리에만 저장, 빠름
|
데이터 저장 방식
|
데이터가 디스크에도 저장이 되기 때문에 데이터 복구 가능
|
데이터가 메모리에만 저장되기 때문에 프로세스가 죽거나, 장애 발생시 데이터 사라짐
|
만료일 지정 방식
|
만료일을 지정하면 만료된 데이터는 캐시처럼 사라짐
|
동일
|
메모리 재사용
|
메모리를 재사용하지 않음, 명시적으로만 데이터 제거 가능
|
저장소 메모리를 재사용. 만료전에 더 이상 데이터를 넣을 메모리가 없으면 LRU 알고리즘에 따라 데이터 삭제
|
데이터 타입
|
다양한 데이터 타입 지원
|
문자열만 지원
|
둘 다 인메모리 데이터 저장소.
|
맴캐쉬드는 명료하고 단순함을 위하여 개발된 반면,
레디스는 다양한 용도에 효과적으로 사용할 수 있도록 많은 특징을 가지고 개발되었다.
📍 Redis 사용사례
좋아요 처리, 사용자 세션관리, 유저 인증 토큰 저장, 메세지 큐잉, 최근 검색 목록 등.
📝
레디스를 한 문장으로 정리하자면 다음과 같다
'고성능 키-값 저장소로서 문자열, 리스트, 해시, 셋, 정렬된 셋 형식의 데이터를 지원하는 NoSQL'
'💻 컴퓨터 시스템' 카테고리의 다른 글
[SQL] Primary Key, Unique 제약조건 (1) | 2022.10.01 |
---|---|
CentOS 7 Redis 설치, 구성 방법, 기본 명령어, 예제 (0) | 2022.06.23 |
int와 Integer 차이 (Primitive 자료형과 Wrapper 클래스 관계) (1) | 2022.04.15 |
백준 1476, 날짜계산 (자바/java) (0) | 2022.04.11 |
백준 2309, 일곱 난쟁이 (자바/java) (0) | 2022.04.11 |
댓글