인프라/용어

레디스 (Redis) 란?

Jake Seo 2023. 4. 8. 19:39

Redis 란?

  • 오픈소스이다.
  • in-memory 데이터 구조 저장소이다.
    • in-memory 특성덕에 갖는 빠른 퍼포먼스 때문에 인기가 많다.
    • memcached 랑 비슷한데 list, set, ordered sets 같은 다양한 데이터타입을 지원한다.
    • 데이터에 대한 atomic operations 을 지원한다.
  • 데이터베이스, 캐시, 메시지 브로커 등으로 이용한다.

레디스의 핵심 기능들

Redis 가 지원하는 데이터 타입

  • Strings: 레디스의 문자열은 Binary-safe 하다. 어떤 타입이든 저장할 수 있다.
  • Hashes: 하나의 레디스 키 내부에 있는 키-밸류 쌍이다. object 나 다중 필드 저장에 적합하다.
  • Lists: 링크드 리스트로 구성된 정렬된 문자열 컬렉션이다. head 와 tail 에 접근하는데 상수 시간이 드므로 스택이나 큐 구현에 적합하다.
  • Sets: 중복되지 않는 문자열의 정렬되지 않은 컬렉션이다. 합집합(unions), 교집합(intersections), 차집합(differences) 등의 연산도 제공한다.
  • Sorted Sets: Sets 와 유사하지만, 각 요소가 스코어를 가져 스코어 순으로 정렬되어 있다.

인메모리 (in-memory) 저장소

  • 레디스는 모든 데이터를 메모리에 저장해둔다.
  • 메모리를 기반으로 하기에 디스크를 기반으로 하는 DB 보다 읽기, 쓰기가 훨씬 빠르다.
  • 스냅샷이나 AOF 를 이용하여 디스크에 현재 가지고 있는 데이터를 저장하는 것도 가능하다.

복제 저장소 (Replication)

  • 레디스는 마스터-슬레이브 복제 저장소 (Replication) 를 지원한다.
  • 슬레이브는 마스터에서 실시간으로 데이터를 복제할 수 있다.
  • 복제 저장소를 통해 읽기 퍼포먼스나 내고장성 (Fault tolerance) 을 향상시킬 수 있다.
  • 마스터 저장소에 장애가 발생했을 때 슬레이브로 대체할 수 있다.

클라이언트 서버 모델 (Client-Server Model)

  • 레디스는 TCP 서버를 동작시켜 특정한 포트를 통해 클라이언트 연결 수신을 대기 (listening) 한다.
  • 클라이언트가 명령을 서버로 보내고 그에 대한 응답을 받는 식으로 동작한다.
  • 이러한 아키텍처로 인해 Redis 는 프로그래밍 언어나 플랫폼에 독립적으로 널리 사용될 수 있다.

발행/구독 패턴 지원 (Pub/Sub pattern support)

  • 레디스는 publish-subscribe pattern 을 지원한다.
    • 클라이언트는 채널을 구독하고 해당 채널로 발행된 메세지를 실시간으로 받아볼 수 있다.
  • 채팅앱이나 알람앱 같은 실시간 앱을 구현할 때 유용한 기능이 될 수 있다.

트랜잭션 (Transactions)

  • 원자적인 (Atomic) 트랜잭션을 지원한다.
    • 몇개의 명령을 묶어서 원자적 트랜잭션으로 구성할 수도 있다.
  • 원자적 트랜잭션은 중단 없이 순차적으로 실행됨을 보장받는다.
  • 하나의 명령어에서 에러가 나면, 트랜잭션은 중단되고 어떠한 명령도 실행되지 않는다.

루아 스크립팅 지원 (Lua scripting)

  • 서버사이드 루아 스크립팅이 지원되어 서버사이드에서 일어나는 복잡한 로직을 클라이언트 서버 왕복 통신 없이 구성할 수 있다.

레디스가 자주 사용되는 용도

  • 캐싱
  • 세션 관리
  • 실시간 분석
  • 메세지 브로커 등등
반응형