https://redis.io/

Redis AI

레디스는 데이터베이스, 캐시, 스트리밍 엔진, 메시지 브로커 등으로 사용할 수 있는… 스토어이다.

굳이 DB라고 안하고 스토어라고 한다.

Redis는 Remote Dictionary Store의 약자라고 함.

인 메모리

레디스를 설명하는 주요 키워드로 인 메모리라는게 있는데, 이게 뭘까?

https://aws.amazon.com/ko/elasticache/what-is-redis/

위의 글에서 힌트를 얻었다. Redis는 SSD에 저장되는게 아니라 서버의 **주 메모리(RAM)**에 상주한다.

따라서 보조기억장치와 IO할 필요가 없기 때문에 시간을 매우 절약할 수 있음.

관련해서 컴퓨터 구조를 다시 살펴보자.

입출력 장치

위 내용에서 DMA가 필요했던 이유도 보조기억장치와의 시간차이였음.

근데 인 메모리라고 하려면, 이와 소통하는 서버와 같은 메모리상에 있어야 하는거 아닌가? 그래야 인메모리 스토어로서의 장점을 살릴 수 있는거 아닌가? 레디스 클라우드같은건 뭐지?

이에 대해선 서버 프로세스와 Redis 프로세스가 동일한 머신의 물리적 메모리상에 있지 않아도, 레디스는 본인 머신의 주 메모리에 상주하고 있고, 비록 네트워크를 타긴 하겠지만 데이터를 보조기억장치가 아니라 다른 머신의 주 메모리상에 있는 Redis에 싣는다는 점에서 인메모리 DB라고 한다.

물론 Redis서버가 실제 서버와 동일 머신에서 구동된다면 훨씬 빠른 접근이 가능하겠지만 서비스 규모가 커지면 여러 컨테이너에서 구동되는 분산환경이 많아지고, Redis를 별도의 서버로 운영하는 경우가 많다. 그럼에도 디스크 기반 DB(일반적인 RDB)보다는 빠른 응답을 보장한다. CPU-보조기억장치보단, CPU-메모리가 훨씬 빠르다.

물론 레디스를 이용하더라도 보조기억장치는 필요함. 영구 저장(Persistence)와 백업 때문.

여기에는 다음의 두 가지 방법이 있다.

  1. 특정 시점마다 메모리에 있는 데이터를 덤프떠서 보낼 수도 있음. 그리고 서버가 재시작되면 해당 덤프파일을 다시 로드해 데이터 복구 가능.(RDB 스냅샷)
  2. 또는 메모리에 가해진 연산등을 로그 형태로 연속 기록. 서버 재시작시 해당 로그들을 재적용해 데이터 복구 가능. (AOF; Append Only File)