본문 바로가기
NoSQL/redis

[Redis 2편] Redis 상세 정리 (명령어, 싱글 스레드, 영속성)

by 무대포 개발자 2022. 1. 13.
728x90
반응형

목차는 redis 목차 에 있습니다.

source 는 Github 에 있습니다.

[Redis 2편] Redis 상세 정리 (명령어, 싱글 스레드, 영속성)

Redis 명령어

  • Redis 는 해시 기반의 key-value 형식의 저장방식을 제공하면서 키 등록/ 조회에 O(1) 시간복잡도를 보장합니다.
  • Get / Set : O(1)
  • SADD, LSET, HSET, HGET —> O(1)

싱글 스레드 기반의 Redis

  • Redis 4.0 부터 4개의 스레드로 동작합니다. 메인스레드 1개, 시스템 명령들을 처리하는 thread 3개
  • 메인스레드에서 사용자 명령어를 처리하기에 싱글 스레드로 동작한다고 이해하면 됩니다.
  • 싱글 스레드로 동작하고 해시 기반의 get/set 을 지원하기에 Redis 의 주요 기능들이 O(1) 시간복잡도로 빠르게 처리되며, 데이터를 일관성있게 유지할 수 있습니다.

싱글 스레드 기반의 Redis 주의사항

  • 주의해야할 점은 redis 는 single thread 기반이기에 시간이 오래 걸리는 명령어를 사용할 경우 뒤에 있는 명령어들은 기다려야하므로 성능에 영향을 줄 수 있습니다.
  • 예를 들면, SMEMBERS 는 한 번에 모든 member 를 조회하기에 오랜 시간이 걸릴 수 있습니다. 이에 대한 방안으로 sscan key cursor 를 사용할 수 있습니다.
  • sscan key cursor 는 데이터를 조회할 때, 일부 데이터만 조회하는 명령어입니다.
Time complexity: O(1) for every call. O(N) for a complete iteration, including enough command calls for the cursor to return back to 0. N is the number of elements inside the collection..

Redis 영속성 (Persistent)

  • RDB 와 AOF 를 지원합니다. RDB 와 AOF 를 같이 쓰면서 영속성을 유지할 수 있습니다.

RDB

  • Redis 의 memory 를 snapshot 한 데이터입니다. 주의해야할 점은 Redis 는 Single thread 이고, snapshot 이 동작할 때, 모든 명령어 수행이 멈춥니다.
  • 동기식 save 는 실제 운영 환경에서 문제가 있기에, BGSAVE (백그라운드 세이브) 를 지원합니다.
  • 기존 프로세스를 fork 해서 snapshot 을 진행하기에 명령어 멈춤이 없습니다. 단, RDB 기능을 사용할 때는 메모리가 현재 사용량의 2배가 될 수 있음을 알고 있어야합니다. (여유 메모리 확보 필요)

AOF

  • redis 명령어들을 파일에 append 합니다.

Redis 기능

Pub/Sub

  • 메시지를 받으면 subscriber 에게 메시지 전달 가능합니다.
    • 단, Message Queue 와는 다름. Message Queue 의 경우 메시지를 받았다는 ack 가 와야 메시지 큐에서 비워지는데 Redis 는 그냥 전달합니다.

cache aside pattern

  • redis 와는 관계가 없지만 캐시 패턴을 간단히 정리해봤습니다.
  • cache 를 사용하는 패턴 중에 하나로서 다음과 같은 플로우로 동작합니다.
    1. Application 에서 캐시 저장소를 조회합니다. 데이터가 없습니다.
    2. 데이터베이스를 조회합니다. 데이터를 가져와 캐시에 저장하고 Client 에 응답해줍니다.
  • 이 방법을 사용할 때, 주의할 점은 초기에 요청이 많이 들어올 때, key 를 못찾는 경우가 존재할 수 있습니다.
    • 기동할 때, 자주 쓰이는 키를 미리 등록해두면 해결이 가능합니다.

reference

댓글