-
[Redis] Redis 동작방식 살펴보기Software Development/Database 2025. 1. 24. 20:04
Remote Dictionary Server의 약자로 In-memory cache 솔루션이다[1]
주요 사용 사례로는 caching, session, pub/sub이 있다.
C언어로 작성되었다.
Redis는 백업 저장소로 디스크를 사용한다. 레디스는 메모리에 데이터를 저장하기 때문에 메모리가 부족하면 swap으로 인해 성능 저하가 발생할 수 있다.
Swap을 할 수 있는 상태라면, 시스템 다운 및 프로세스 Hang을 방지할 수 있지만, 성능 저하가 발생할 수 있다.
Swap을 할 수 없는 상태라면, OOM으로 죽을 수 있다.레디스는 maxmemory라는 설정을 통해서 메모리의 양을 조절할 수 있다. 최대치로 데이터를 저장하게 되면 기존 데이터를 제거하는 방식으로 동작하는데 이를 eviction이라고 부른다. 이러한 방식을 만들기 위해 maxmemory-policy 옵션을 통해 eviction 정책을 만들 수 있다.
redis.conf에서 설정할 수 있다. maxmemory를 0으로 설정하면 제한이 없다.
Redis에서 사용되고 있는 알고리즘은 LRU, LFU, RANDOMRedis Key Eviction
레디스가 메모리 오버플로우 상태에서 작동하는 경우 매커니즘을 자주 트리거할 것이고, 이는 성능에 영향을 줄 수 있다.Replicas가 연결된 경우, key 제거 작업이 replica 노드와도 동기화되어 write 증폭 문제가 발생할 수 있다.
항상 maxmemory가 실행 사용 메모리보다 크게 설정하는 것이 성능의 안정성 측면에서 좋다.
Redis 영속성 보장법[[2]
RDB(Snapshotting) 방식: 주기적으로 디스크에 접근하여 상태를 옮긴다. Redis 데이터를 옮기는 동안 Blocking될 수 있고, 데이터 손실 가능성이 있다.AOF(Append-Only File) 방식: Redis Wrtie/Update 연산 시 별도의 로그 파일에 기록. 해당 방식은 로그 파일을 복구하는데 시간이 걸리며, 로그 파일이 계속 커지면 많은 공간을 차지할 수 있다.
Redis는 Single Thread이다. 즉, 들어오는 요청을 큐에 적재하고 Single Thread로 하나씩 처리한다.멀티쓰레딩이 아니라서 컨텍스트 스위칭이 필요없으며, Deadlock이 발생하지 않는다.
Single Thread 방식으로 인한 단점도 있다.
오버헤드가 큰 요청(ex 전체 데이터 조회) 을 처리하는 동안 다른 명령어는 블로킹된다.
Redis 아키텍처Sigle 모드: 하나의 인스턴스로 작동하는 Redis
Cluster 모드:
Sentinal 모드:[3] https://redis.io/redis-enterprise/technology/redis-enterprise-cluster-architecture/
'Software Development > Database' 카테고리의 다른 글
Database의 파일시스템 EXT4, XFS 비교 (Feat. MongoDB, ScyllaDB) (0) 2024.06.22 [몽고디비] Query Plans (0) 2023.05.09 [MongoDB] createIndex commitQuorum (0) 2023.03.31 [MongoDB] 몽고디비 설치시 최적의 하드웨어 및 OS 설정 (0) 2023.03.12 [MongoDB] 재해복구 시스템을 위한 몽고디비 노드 설정. (0) 2023.03.10