Redis란

GwanMtCat·2023년 10월 4일
0

레디스 개념

레디스란 Remote Dictionary Server의 약자로서,
"Key-Value" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)이다.

모든 데이터를 메모리로 불러와서 처리하는 In-Memory기반의 DBMS로

데이터베이스, 캐시, 메시지 브로커 등으로 사용되어진다. 주로 캐시 서버를 구현할 때 많이 사용된다.


레디스 특징

  • 레디스는 다음과 같은 다양한 자료 구조를 지원한다.
    (Strings, JSON, Sets, Lists, Sorted sets ..)
  • 일정 수준 이상 영속성을 지원하는 인-메모리 데이터베이스
    서버가 내려가더라도 디스크나 로그 파일에 저장하여 다시 시작하면 메모리에 로딩할 수 있다.

    • RDB (Redis Database) 방식
      메모리에 있는 내용 전체를 디스크에 옮겨 담는 방식 (스냅샷)
    • AOF (Append On File) 방식
      Redis의 모든 Write/Update 연산 자체를 로그 파일에 기록하는 방식
  • 싱글 스레드 방식으로 연산을 원자적으로 처리 가능 (쓰레드 세이프가 어느정도는 보장이되나 더블 클릭 이슈는 해결이 안된다.)

  • 트랜잭션(optimistic locking), pub/sub 을 지원한다.

  • 읽기 성능 증대를 위한 replication을 지원
    (데이터를 비동기 방식 으로 다른 레디스 노드에 복사)

  • 다양한 Data Eviction 정책을 제공한다.

  • 쓰기 성능 증대를 위한 클라이언트 측 샤딩 지원

  • 단일 인스턴스로는 고가용성이 지원되지 않아 센티넬(Sentinel), 클러스터(Cluster) 등의 모드를 지원한다.

    • 센티넬(Sentinel) : Sentinel 프로세스 집합을 사용하여 Redis 인스턴스를 모니터링하고 필요한 경우 자동 장애 조치를 수행, 중소 규모의 Redis 배포에 적합
    • 클러스터(Cluster) : 여러 Redis 인스턴스에 걸쳐 데이터를 분할하는 분산 데이터베이스 시스템, 수평적 확장성이 필요한 대규모 Redis 배포에 적합

센티넬과 클러스터의 구체적인 차이점은 다음과 같다.

선택은 다음과 같이 고려하여 선택할 수 있다.


vs Memcached

Memcached 란?

2003년에 개발된 분산 메모리 캐시 시스템으로
Key-Value 모델에 기반을 둔 NoSQL 데이터 저장소이다.

다음과 같은 특징이 있다.

  • 멀티 스레드를 지원한다. 클라우드 상에서 수직확장에는 유리하다.

  • 자료구조는 String 밖에 지원하지 않는다.

  • replication, 영속성(presistence) 관련 지원을 하지 않는다.

  • 트랜잭션, pub/sub 을 지원하지 않는다.

  • Data Eviction 정책은 LRU(Least Recently Used) 만 지원한다.

  • Redis에 비해 적은 메모리 양을 요구하여 HTML과 같은 정적인 데이터를 캐싱하는 것에는 Memcached가 유리하다.

결론: 레디스가 좀 더 낫다.

스택오버 플로우에서 Memcached vs Redis 에 관해서는 새 프로젝트엔 Redis를 무조건 추천한다는 결론이 있다.

https://stackoverflow.com/questions/10558465/memcached-vs-redis


NHN 에서 Redis 야무지게 사용하기 라는 강의를 한적이 있는데 굉장히 도움이 되는 내용이 많으니 꼭 한번 봐보자.

https://youtu.be/92NizoBL4uA

0개의 댓글