Redis 의 대표적 특징
- Single threaded
- 한번에 하나의 명령어만 실행 가능
- 처리시간이 긴 명령어를 실생하면 그뒤에 있는 명령어들은 전부 대기
- 전체 키를 불러오는 Keys명령어 처리가 오래 걸림
- Keys 명령어 실행시 뒤의 Get/Set 명령어들은 대기로 타임아웃 또는 실패 할수도 있음
Redis 서버의 메메로 한계 도달시
- 메모리 한계 maxmemory 로 설정
- maxmemory 까지 메모리 사용시 maxmemory policy 에 따라 추가 메모리 확보
maxmemory policy 설정값 (메모리 확보 정책)
- noeviction
- 기존 데이터 삭제안함
- 메모리 부족시 OOM(Out Of Memory) 오류 반환후 새로운 데이터 삭제
- allkeys-lru
- LRU(Least Recently Used) 페이지 교체 알고리즘으로 데이터 삭제
- volatile-lru
- expire set을 가진 것중 LRU로 삭제
- allkeys-random
- 램덤으로 데이터 삭제
- volatile-random
- expire set을 가진것 중 랜덤으로 데이터 삭제
- volatile-ttl
- expire set을 가진것 중 TTL(Time To Live) 값이 짧은것부터 삭제
- allkeys-lfu
- 가장 적게 액세스한 키 제거
- volatile-lfu
- expire set을 가진것 중 가장 적게 액세스한 키부터 제거
- noeviction
eviction
- maxmemory 초과로 데이터가 지워지는것
- redis-cli 에서 INFO 명령어 실행시 evicted_keys 수치로 eviction 발생 여부 확인 가능
- evicted_keys
- evicted된 키들의 count 로 크면 클루록 많은 데이터가 메모리에서 삭제된것임
maxmemory 설정 예외
- 쓰기 요청 처리시 COW(Copy On Write) 방식으로 작동
- 쓰기 요청은 OS는 fork()를 통해 자식 프로세스를 생성함
- fork() 시에 가상 메모리 주소를 할당받지만 물리 메모리 블록을 공유함
- 쓰기 작업 시작시 수정할 메모리 페이지 복사후 쓰기 작업 진행
- 추가 메모리 필요
- fork 시 복사할 사이즈만큼 free memory 필요
/porc/sys/vm/overcommit_memory 값 1로 설정 필요
- overcommit_memory=0
- OS는 주어진 메모리량보다 크게 할당 불가
- fork()시에 OS가 충분한 메모리가 없다고 판단해서 에러 발생
- overcommit_memory=1
- OS에게 over 해서 메모리 할당가능하게 설정
- maxmemory에 도달시 policy 에 따라 처리됨
- overcommit_memory=0
used_memory_rss
- redis 의 memory 수치중 주요 모니터링 항목
- 데이터를 포함해서 redis 가 실제로 사용하고 있는 메모리 크기
- 실제로 사용하고 있는 used_memory 보다 클수 있음
- OS가 메모리 할당시 page 사이즈의 배수만큼 할당하기 때문
- page size = 4096 일때, 요청 메모리 사이즈가 10이라도 OS는 4096만큼 할당함, 이를 Pragmentation (파편화) 현상이라고함
'Redis' 카테고리의 다른 글
클러스터 구성 (0) | 2024.12.01 |
---|---|
복제 구성, sentinel (0) | 2024.11.27 |
WSL2 + Rocky Linux 8 + Redis 7.2 설치 (0) | 2023.12.10 |