본문 바로가기
public void static main()/Etc

[Redis] Redis란?

by 햄리뮤 2021. 11. 18.
반응형

회사에서 발표 준비 했던거... 레디스 관련 정리!!

Redis

"Remote Dictionary System"의 약자로 메모리 기반의 Key-Value Stroe 입니다.

  • List, Hash, Set, Sorted Set, List 같은 여러 형식의 자료구조를 지원합니다.
  • NoSql DBMS로 분류 되기도 하고, memcahed와 같은 In memory 솔루션으로 분리 되기도 합니다. 
  • 쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding)을 지원합니다.
  • 메모리에 상주하면서 RDBMS의 캐시 솔루션으로 주로 사용되며 Instagram, Line, StackOverflow, Blizzard 등 여러 소셜 서비스에서 사용하는 검증 된 오픈소스 솔루션 입니다.

<In memory>

데이터 읽기 성능 개선을 위해 데이타베이스와 같은 영구 저장소로부터 데이터를 로드하여 메모리(RAM)에 저장할 수 있는 아키텍쳐를 말합니다.

<Sharding>

같은 테이블 스키마를 가진 데이터(row)를 다수의 데이터베이스에 분산하여 저장하는 방법을 말합니다.

특징

[Key-Value Stroe]

특정 Key값에 저장하는 구조로 되어 있고 기본적인 PUT/GET Operation을 지원합니다.

이 모든 데이터는 메모리에 저장되고, 이로 인하여 매우 빠른 읽기 쓰기 속도가 보장됩니다. 그래서 전체 저장 가능한 데이터 용량은 물리적인 메모리 크기를 넘어설 수 있습니다.

[다양한 데이터 타입] 

단순한 메모리 기반의 Key-Value 라면 이미 memcached가 있습니다.

데이터가 메모리만 저장되는 Memcached에 반면 Redis는 메모리 + Disck에도 저장이 된다는 차이점도 있지만

또 어떤 차이 때문에 Redis의 사용이 더 많을까요? 

Redis의 Key-Value Stroe에서 Value는 단순한 Object가 아니라 자료구조를 갖기 때문입니다.

Redis가 지원하는 데이터 형은 크게 아래와 같이 5가지로 나눌 수 있습니다.

  • String
    • 일반적인 문자열로 최대 512mb 길이 까지 지원합니다. Text 문자열뿐만 아니라 Integer와 같은 숫자나 JPEG같은 Binary File까지 저장할 수 있습니다.
  • Set
    • Set은 String의 집합입니다. 여러개의 값을 하나의 Value 내에 넣을 수 있다고 생각하면 됩니다. 블로그의 태크(Tag)등에 사용될 수 있습니다.
    • Set간의 연산을 지원합니다. 교집합, 합집합, 차이를 매우 빠른 시간내에 추출할 수 있습니다.

  • Sorted Set
    • Set에 "score"라는 필드가 추가된 데이터 형으로 score는 일종의 가중치 정도로 생각하면됩니다 sorted set에서 데이터는 오름차순으로 내부 정렬되며, 정렬이 되어있는 만큼 score 값 범위에 따른 쿼리, top rank에 따른 쿼리 등이 가능합니다.

  • Hashes
    • Hash는 value 내에 field/string value 쌍으로 이루어진 테이블을 저장하는 데이터 구조입니다. RDBMS에서 PK 1개와 string 필드 하나로 이루어진 테이블이라고 이해하면 됩니다.

  • List
    • String들의 집합으로 저장되는 데이터 형태는 Set과 유사하지만, 일종의 양방향 Linked List라고 생각하시면 됩니다. List 앞과 뒤에서 Push/Pop 연산을 이용해서 데이터를 넣거나 뺄 수 있고, 지정된 Index값을 이용하여 지정된 위치에 데이터를 넣거나 뺄 수 있습니다.

[영속성 (Persistence)]

서버가 종료된 후에 다시 시작 하더라도 Disk에 저장해 놓은 데이터를 다시 읽어서 데이터가 유실되지 않습니다.

데이터 저장 방식은 2가지 정도가 있습니다.

  • Snapshot
    • 특정 시점 또는 반복적으로 메모리에 있는 전체 데이터를 디스크에 저장합니다.
    • 장점
      • 파일 크기가 작아 AOF 보다 로딩시간이 빠릅니다.
    • 단점
      • 특정 시점에 데이터를 저장함에 따라 이슈 발생 시 데이터가 유실 될 수 있습니다.
  • AOF (Append Only File)
    • 명령어가 실행 될 때 마다 기록이 저장됩니다.
    • 장점
      • 서버 장애가 발생해도 데이터 유실이 거의 없습니다.
      • 텍스트 파일로 백업을 제공합니다. 손상이 발생하더라도 쉽게 Edit하여 복구 가능합니다.
    • 단점
      • 모든 명령이 기록되기 때문에 파일 크기가 커지며, 데이터 로딩이 느려질 수 있습니다, OS의 파일 크기 제한으로 장애가 발생할 수 있습니다.
        • Re-write를 통해 파일 크기를 줄일 수 있으며, Re-write를 할 경우 파일의 최종 데이터만 남게 됩니다.

비교

[Redis와 다른 데이터베이스 및 소프트웨어 비교]

[Redis vs Memcached]

분류RedisMemcached

처리속도 데이터가 디스크와 메모리에 저장되는데
Memcached와 성능 차이가 없고, 빠릅니다.
데이터가 메모리에만 저장되며, 빠릅니다.
데이터
저장방식
데이터가 디스크에도 저장이 되기 때문에
데이터 복구가 가능합니다
데이터가 메모리에만 저장되기 때문에 프로세스가 죽거나,
장애 발생 시 데이터가 사라집니다.
만료일
지정 방식
만료일을 지정하면 만료된 데이터는 캐시처럼 사라짐니다. 동일
메모리
재사용
메모리를 재사용하지 않고,
명시적으로 데이터 제거가 가능합니다.
저장소 메모리를 재사용, 만료전에 더 이상 데이터를 넣을 메모리가 없으면
LRU 알고리즘에 따라 데이터를 삭제합니다.
데이터 타입 다양한 데이터 타입 지원 문자열만 지원

Redis 사용 사례

  • 캐싱
    • 데이터베이스 앞에 배치된 Redis는 성능이 뛰어난 In memory 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며, 관계형 또는 NoSQL 데이터베이스의 부담을 줄여줍니다.
  • 세션 관리
    • 빠른 키 값 스토어를 사용하면 간단하게 세션 정보를 관리할 수 있습니다.
  • 실시간 순위표
    • Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬됩니다. 손쉽게 동적 순위표를 생성할 수 있습니다.
  • 속도제한
  • 대기열
    • Redis List 데이터 구조를 사용하며 간단한 영구 대기열을 손쉽게 구현할 수 있습니다. 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 다양한 애플리케이션에 적합합니다.
  • 채팅 및 메시징

정리

  • 리스트형 데이터 입력과 삭제가 MySQL에 비해서 10배정도 빠름.
  • 메모리를 활용하면서 영속적인 데이터 보존.
    • 명령어로 명시적 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않는다.
    • shapshot(기억장치) 기능을 제공하여 메모리의 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.
  • 1개의 Single Thread로 수행, 서버 하나에 여러개의 서버를 띄우는 것이 가능.

 

감사합니다😀

 

 

 

** 그냥 하루하루 개인 공부한 것을 끄적 거리는 공간입니다.

이곳 저곳에서 구글링한 것과 강의 들은

내용이 정리가 되었습니다.

회사에서 정리한 내용이라 출처를 표시하지 못하였습니다.

문제가 될시 말씀해주시면 해당 부분은 삭제 하도록하겠습니다. **

반응형

'public void static main() > Etc' 카테고리의 다른 글

[OS] 메모리 영역  (0) 2022.02.01
[Swagger] 스웩! 췤!  (0) 2022.01.29
[npm] npm이란  (0) 2021.05.05
[Gradle] Gradle은 무엇일까나  (0) 2021.05.05
[Network] HttpURLConnection 와 URL class  (0) 2021.01.08

댓글