Software Development/Database

[Redis] Redis 동작방식 살펴보기

루ㅌ 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, RANDOM

Redis 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
아키텍처

[3]

Sigle 모드: 하나의 인스턴스로 작동하는 Redis

Cluster 모드: 
Sentinal 모드: 



[1] https://s-core.co.kr/insight/view/redis-%EB%82%B4%EB%B6%80-%EB%8F%99%EC%9E%91-%EC%9B%90%EB%A6%AC%EC%99%80-%EC%B5%9C%EC%A0%81%ED%99%94-%EB%B0%A9%EC%95%88/

[2] https://velog.io/@choidongkuen/Redis%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B4%85%EC%8B%9C%EB%8B%A4

[3] https://redis.io/redis-enterprise/technology/redis-enterprise-cluster-architecture/