도구스개발

Redis 메모리 사용량 추정기

Redis 키 개수·자료형·크기로 메모리 사용량을 추정하고, listpack에서 해시테이블·스킵리스트로 승격되는 지점을 보여줍니다.

바이트

해시 필드 개수

바이트
바이트

추정 총 메모리

90.7MB

키당 약 951바이트 · 인코딩: listpack

키 개수100,000개
내부 인코딩listpack
승격(promotion) 여부아니오 — 압축 표현 유지
hash-max-listpack-entries 512 / hash-max-listpack-value 64B 기준
추정치입니다. Redis 7.4.0 소스코드의 구조체 크기(dictEntry·redisObject·sds 헤더·listpack 인코딩)를 그대로 반영했지만, jemalloc 등 실제 메모리 할당자의 크기 올림·조각화는 반영하지 않았습니다. 실측값은 MEMORY USAGE 명령이나 INFO memory로 확인하세요.

사용 방법

  1. 1자료형(string/hash/set/zset/list)을 고르고 예상 키 개수를 입력합니다.
  2. 2평균 키 길이와 필드·값(또는 원소) 크기, 컬렉션이면 평균 원소 개수를 입력합니다.
  3. 3실제로 어떤 내부 인코딩이 되는지와 추정 총 메모리를 확인합니다.

자주 묻는 질문

Redis 소스코드(dict.c·server.h·listpack.c·sds.h)의 구조체 크기를 그대로 반영합니다. 키 하나는 dictEntry(24바이트) + redisObject(16바이트) + 문자열 헤더가 기본이고, 해시·셋·정렬셋·리스트 같은 컬렉션은 원소 개수·크기가 설정값을 넘는지에 따라 훨씬 가벼운 listpack 압축 표현을 쓸지, 해시테이블·스킵리스트로 승격할지가 갈립니다.

해시는 필드 512개 또는 필드/값 64바이트를 넘으면(hash-max-listpack-entries/value 기본값), 셋은 128개 또는 64바이트(정수만으로 구성되면 512개까지 더 저렴한 intset 유지), 정렬셋은 128개 또는 64바이트를 넘으면 승격됩니다. 이 값은 redis.conf에서 바꿀 수 있으므로, 실제 운영 중인 인스턴스의 설정값도 함께 확인하는 것이 좋습니다.

리스트는 원소 개수가 아니라 노드 하나의 바이트 크기(list-max-listpack-size, 기본 -2 = 8KB)로 자릅니다. 한 노드에 다 담기면 listpack 하나로 끝나지만, 넘치면 quicklist라는 연결 구조로 여러 listpack 노드를 이어 붙여 노드마다 약 40바이트의 관리 오버헤드가 추가됩니다.

여기 계산은 Redis가 논리적으로 요청하는 바이트 수만 더한 것입니다. 실제로는 jemalloc 등 메모리 할당자가 요청 크기를 정해진 단위로 올림해서 배정하고(예: 24바이트 요청 → 32바이트 청크), 여기에 조각화(fragmentation)까지 겹치므로 실측값(RSS, used_memory)은 이 추정치보다 10~30% 이상 높게 나오는 경우가 흔합니다.

알아두면 좋은 점

  • 구조체 크기는 Redis 7.4.0(2024-06, 안정판) 소스코드 기준입니다. 다른 버전은 내부 구조가 달라질 수 있습니다.
  • jemalloc 등 실제 메모리 할당자의 크기 올림(rounding)·조각화는 반영하지 않은 추정치입니다. 정확한 값은 운영 중인 인스턴스에서 MEMORY USAGE 명령이나 redis-cli --bigkeys로 실측하세요.
  • intset(정수 전용 셋) 원소 크기는 실제 값 범위에 따라 2/4/8바이트로 달라지는데, 이 계산기는 8바이트(상한)로 계산해 다소 넉넉하게 잡습니다.
  • 복제(replica)·AOF·RDB 스냅샷이 쓰는 추가 메모리는 포함하지 않았습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 9일 · 결과는 참고용 추정치입니다.