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 를 사용하는 패턴 중에 하나로서 다음과 같은 플로우로 동작합니다.
- Application 에서 캐시 저장소를 조회합니다. 데이터가 없습니다.
- 데이터베이스를 조회합니다. 데이터를 가져와 캐시에 저장하고 Client 에 응답해줍니다.
- 이 방법을 사용할 때, 주의할 점은 초기에 요청이 많이 들어올 때, key 를 못찾는 경우가 존재할 수 있습니다.
- 기동할 때, 자주 쓰이는 키를 미리 등록해두면 해결이 가능합니다.
reference
'NoSQL > redis' 카테고리의 다른 글
[Redis 6편] Redis 성능 (0) | 2022.06.11 |
---|---|
[Redis 3편] Redis 상세 정리 (key, 클러스터, 센티넬) (0) | 2022.01.13 |
[Redis 4편] spring redis 환경 세팅 및 예제 (0) | 2022.01.06 |
[Redis 5편] Redis 상세 정리 (트랜잭션과 Lock) (0) | 2022.01.05 |
[Redis 1] Redis 는 무엇이며 언제 사용하는가? (0) | 2022.01.04 |
댓글