• 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을 가진것 중 가장 적게 액세스한 키부터 제거
  • 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 에 따라 처리됨
  • 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

+ Recent posts