Posts Redis 특징
Post
Cancel

Redis 특징

Redis는 Remote Dictionary Server를 뜻하며 key-value 기반의 인메모리 데이터 저장소이다.

대용량 트래픽을 처리하기 위해 자주 사용되는 Redis의 대표적인 특징들을 알아보자.

1. key-value 구조의 비관계형 데이터베이스

RDB와는 다르게 관계가 없는 비정형 데이터를 관리한다.

2. 싱글 스레드 기반

Redis는 싱글 스레드 기반으로 동작하기에 동시성 이슈에 대한 고민이 필요 없게 된다. 즉 한 번에 하나의 명령이 처리되는 구조다.

Redis의 자세한 동작 메커니즘은 여기에 자세히 정리되어 있다.

3. 인메모리 기반

디스크가 아닌 메모리(RAM) 기반으로 처리되기에 read/write 속도가 빠르다.

4. All or Nothing(원자성)을 보장하지 못한다.

Redis의 트랜잭션은 RDB와는 다르게 All or Nothing 개념이 적용되지 않는다.

MULTI 와 EXEC 사이 명령들의 실행 도중 에러가 발생한다면 에러를 그대로 두고 끝까지 명령을 실행한다.

단, Lua 스크립트를 활용하여 All or Nothing을 적용시킬 수 있다.

Redis는 C언어로 구현되어 있지만 Lua 스크립트 엔진이 내장되어 있기에 Lua 스크립트를 실행 가능하다.

주로 아래와 같은 이유로 Lua 스크립트 엔진이 내장되었다.

  • 원자적 트랜잭션 보장: 전체 스크립트를 원자적(All or Nothing)으로 실행하도록
  • 네트워크 효율성 극대화: 여러 명령어를 별도로 실행하는 대신 하나의 스크립트로 한 번에 보냄으로써 클라이언트/서버 간 왕복 통신 비용을 감소하고자
  • 확장성과 재사용성: Lua 스크립트를 통해 Redis의 기본 명령으로는 구현하기 어려운 사용자 정의 로직을 서버 측에서 직접 실행 및 이를 재사용하도록
  • 경량화된 언어: Lua는 가볍고 빠르며 쉽게 임베딩할 수 있는 언어이기에

그래서 Rate Limit 구현과 같이 원자적인 처리가 필요할때 주로 사용되곤 한다. (참고: https://dev.gmarket.com/69)

5. 다양한 아키텍처 지원 가능

  • Single 모드: 단일 인스턴스 서버로 구성
  • Cluster 모드: 여러 서버 인스턴스로 구축하고, 데이터 묶음을 여러 개의 노드로 나누어 각 서버 인스턴스에 구성
  • Sentinal 모드: Cluster 모드와 비슷하지만, 별도의 추가적인 Sentinal 인스턴스를 구성하여 아래 3가지 기능을 가지고 있음(참고)
    • 모니터링(Monitoring)
    • 자동 장애 조치(Automatic Failover)
    • 알림(Notification)

Reference

This post is licensed under CC BY 4.0 by the author.

Redis 동작 원리

-