레디스(Redis)

이창준·2023년 4월 11일
0

레디스(Redi)란?

: Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템
(데이터베이스, 캐시, 메세지 브로커로 사용되며 인메모리 데이터 구조를 가진 저장소)

  • db-engines.com 에서 key, value 저장소 중 가장 순위가 높다.

▣ 레디스의 특징

  • Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없다.
  • 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠르다.
  • String, Lists, Sets, Sorted Sets, Hashes 자료 구조를 지원한다.
    1) String : 가장 일반적인 key - value 구조의 형태
    2) Sets : String의 집합입니다. 여러 개의 값을 하나의 value에 넣을 수 있다. 포스트의 태깅 같은 곳에 사용됨.
    3) Sorted Sets : 중복된 데이터를 담지 않는 Set 구조에 정렬 Sort를 적용한 구조로 랭킹 보드 서버 같은 구현에 사용할 수 있음.
    4) Lists : Array 형식의 데이터 구조이다. List를 사용하면 처음과 끝에 데이터를 넣고 빼는 건 빠르지만 중간에 데이터를 삽입하거나 삭제하긴 어려움.
  • Single Threaded이다.
    : 한 번에 하나의 명령만 처리할 수 있다. 그렇기 때문에 중간에 처리 시간이 긴 명령어가 들어오면 그 뒤에 명령어들은 모두 앞에 있는 명령어가 처리될 때까지 대기가 필요함.

▣ 레디스 사용 주의할 점

  1. 서버에 장애가 발생했을 경우 그에 대한 운영 플랜이 꼭 필요하다.
    : 인메모리 데이터 저장소의 특성상, 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있기 때문
  2. 싱글 스레드의 특성상, 한 번에 하나의 명령만 처리할 수 있다. 처리하는데 시간이 오래 걸리는 요청, 명령은 피해야 한다.
  3. 메모리 관리가 중요하다.

레디스 영속성

: 레디스는 지속성을 보장하기 위해 데이터를 DISK에 저장할 수 있다. 서버가 내려가더라도 DISK에 저장된 데이터를 읽어서 메모리에 로딩을 한다.

※ 데이터를 disk에 저장하는 방식은 크게 두 가지가 있다.

  1. RDB(Snapshotting) 방식
    :순간적으로 메모리에 있는 내용을 DISK에 전체를 옮겨 담는 방식

  1. AOF (Append On File) 방식
    : Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태

RDB 방식

1. 장점 :

1) RDB는 단일 파일이며, 특정 시점의 메모리에 있는 데이터 전체를 바이너리파일에 저장한다. -> 백업에 매우 효과적임.

2) RDB는 Redis 부모가 영속화를 위해 단지 자식을 fork()하면되기 때문에 간편하다. -> RDB는 AOF에 비해서, 큰 데이터를 빠르게 재시작한다.

2. 단점 :

1) RDB는 Redis가 멈추는 경우 데이터 손실을 최소화해야 할 때 성능이 좋지 않다.

2) RDB는 가끔 자식 프로세스를 이용해 디스크에 영속화하는 fork()가 필요하다.
-> fork()는 데이터가 너무 크면, 작업 시간이 길어질 수 있고, 수백만초 혹은 심지어 1초 이상 동안 클라이언트가 Redis 기능을 사용하지 못하는 상황이 발생할 수 있음.

AOF 방식

1. 장점 :

1) AOF는 내구성이 훨씬 좋다. -> fsync 비활성화, 매초 fsync(default), 매 쿼리 fsync 등등 여러 fsync 정책 수립 가능.

2) AOF 로그는 추가전용(append-only)이기 때문에, 검색이 없고, 장애 시에도 문제가 없다. -> 어떠한 이유로 로그가 반쯤 작성된 명령어로 끝나더라도, 손쉽게 복구할 수 있음.

2. 단점 :

1) AOF 파일들은 같은 데이터 기준으로 RDB보다 훨씬 용량이 크다.

2) AOF는 fsync 정책에 따라 RDB보다 성능이 느릴 수 있다.

profile
안녕하세요^^

4개의 댓글

comment-user-thumbnail
2023년 4월 13일

레디스에 대해서는 처음 들어봤는데 이해하기 쉽게 잘 정리하신 것 같아요 !🙌🙌

답글 달기
comment-user-thumbnail
2023년 4월 13일

두가지 타입의 Redis의 장단점을 중심으로 설명돼있어서 좋았습니다.

답글 달기
comment-user-thumbnail
2023년 4월 13일

이해하기 쉽게 잘 정리하신 것 같아요!

답글 달기
comment-user-thumbnail
2023년 4월 14일

레디스의 특징을 자세하게 설명해주신것 같습니다.

답글 달기