Database/Redis

[실전 레디스] 2-2. 자료형과 기능: 보조 자료형

noahkim_ 2025. 3. 20. 22:00

하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.

  • 보조 자료형은 모든 자료형에서 사용될 수 있음

 

1. Bitmap

  • 1비트 단위로 데이터를 표현하는 방식
  • 실제로는 String 형으로 정의되어 있음

 

장점

장점 설명
메모리 절약
하나의 비트만으로 상태를 표현 가능
샤딩 용이
예를 들어 유저 ID의 해시값을 기준으로 여러 Bitmap 키로 분리해서 수평 분산 저장 가능

 

명령어

생성

더보기
setbit visitor:20220829 100 1
setbit visitor:20220829 200 1

setbit visitor:20220830 400 1

 

 

읽기

더보기
getbit visitor:20220829-20220830 100
bitcount visitor:20220829-20220830
bitpos visitor:20220829-20220830 1
  • bitpos: 지정한 비트의 처음 위치 가져오기

 

비트 조작

더보기
bitfield mybits set i8 0 100
bitfield mybits get i8 0
bitfield mybits incrby i8 0 10
bitfield mybits overflow sat incrby i8 0 100
항목 설명 예시 / 범위
type 8비트 정수 유형 지정부호 비트 사용 여부 결정 - i8: -128 ~ 127 범위의 8비트 정수
- u8: 0 ~ 255 범위의 부호 없는 8비트 정수
overflow 범위 초과 시 처리 방식 지정 - sat: 초과 값은 최대/최소 값으로 고정
- fail: 초과 시 에러 발생
- wrap: 범위를 초과하면 순환 처리 (modulo)

 

비트 연산

더보기
bitop or visitor:20220829-20220830 visitor:20220829 visitor:20220830

 

활용

로그인 확인

더보기

출석 체크

SETBIT login:2025-08-06 123 1  # 123번 유저가 로그인

 

출석 확인

GETBIT login:2025-08-06 123  # 1이면 출석, 0이면 미출석

 

출석자 수 확인

BITCOUNT login:2025-08-06

 

2. HyperLogLog

  • 확률적 자료구조
    • 매우 적은 메모리로 수백만 개의 고유한 값을 얼마나 중복 없이 봤는지 추정
    • 오차가 다소 있을 수 있음 (약 0.81%)
  • 메모리 공간을 효율적으로 사용
  • 대략적인 값만 알아도 괜찮은 경우에 사용됨 (방문자 수, API 요청자 수, 트랜잭션 수)

 

동작 과정

  1. 해싱: 입력된 원소는 내부적으로 128비트 해시 함수로 변환됨
  2. 비트 분할: 해시값을 앞부분 + 뒷부분으로 분할함
    • 버킷 선택 비트 (앞부분 비트): 어떤 버킷에 기록할지 결정
    • 값 측정 비트 (뒷부분 비트): 나머지 비트는 선행 0의 개수 측정을 위해 사용됨
  3. Leading Zones 계산:  뒷부분 비트에서 앞쪽부터 0이 몇 개 연속되는지 카운트
    • 희귀도 측정: 고유한 데이터가 많아질수록 더 긴 0000... 패턴이 나올 확률 증가
    • 각 버킷의 최대값 기록
  4. 전체 추정치 추정

 

특징

복수의 레지스터 사용
  • 해시값의 일부를 버킷(레지스터) 선택에 사용하여 충돌 방지

 

Harmonic Mean을 이용한 추정
  • 여러 버킷의 선행 0 개수를 이용해 고유 원소 개수를 추정
  • 정확도를 높이기 위해 조정 상수와 조화 평균으로 보정

 

명령어

추가

더보기
pfadd counter:day1 visitor1 visitor2 visitor3
pfadd counter:day1 visitor4 visitor5
pfadd counter:day1 visitor6 visitor7

pfadd counter:day2 visitor8
pfadd counter:day2 visitor2 visitor5 visitor9

 

 

카운트한 값의 근사치 가져오기

더보기
pfcount counter:day1
pfcount counter:day2

 

 

자료구조 통합

더보기
pfmerge count:total counter:day1 counter:day2

 

 

3. 지리적 공간 인덱스