Database/Redis

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

noahkim_ 2025. 3. 20. 22:00

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

 

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

 

1. Bitmap

  • 현재 처리하고 있는 데이터 모델을 비트로 표현함
  • 내부적으로 String 형으로 정의되어 있음 (type 명령어로 확인 가능)

 

장점
  • 메모리를 아낄 수 있음 (단, 희소한 상태가 되면 낭비가 심해 비효율적임)
  • 여러 키로 분해하여 샤딩하기 용이함

 

명령어

생성
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
    • u8: 0~256
  • overflow: 범위값을 넘어갈 경우 어떻게 처리할 지 지정
    • sat: 최대/최소값으로 설정
    • fail: 에러
    • wrap: 순환

 

비트 연산
bitop or visitor:20220829-20220830 visitor:20220829 visitor:20220830

 

 

활용

  • 실시간 분석
  • 객체 ID 관련 이진 정보 저장

 

2. HyperLogLog

  • 확률적 데이터 구조
    • 대량의 데이터에서 고유한 원소 개수를 효과적으로 계산할 수 있는 확률적 계산 방법
  • 메모리 공간을 효율적으로 사용
  • 오차가 다소 있을 수 있음 (약 0.81%)
  • 대략적인 값만 알아도 괜찮은 경우에 사용됨 (방문자 수, API 요청자 수, 트랜잭션 수)

 

동작 과정

  1. 각 원소를 해싱 및 분할
    1. 일부 비트는 어느 버킷에 저장할지 선택하는데 사용
    2. 나머지 비트는 선행 0 개수 계산에 사용
  2. Leading Zones
    • 해시값의 앞쪽부터 0이 몇 개 연속되는지 카운트
    • 고유한 데이터가 많아질수록 더 긴 0000... 패턴이 나올 확률 증가
    • 각 버킷의 최대값 기록
  3. 전체 개수 추정

 

특징

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

 

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. 지리적 공간 인덱스