하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.
- 보조 자료형은 모든 자료형에서 사용될 수 있음
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 요청자 수, 트랜잭션 수)
동작 과정
- 해싱: 입력된 원소는 내부적으로 128비트 해시 함수로 변환됨
- 비트 분할: 해시값을 앞부분 + 뒷부분으로 분할함
- 버킷 선택 비트 (앞부분 비트): 어떤 버킷에 기록할지 결정
- 값 측정 비트 (뒷부분 비트): 나머지 비트는 선행 0의 개수 측정을 위해 사용됨
- Leading Zones 계산: 뒷부분 비트에서 앞쪽부터 0이 몇 개 연속되는지 카운트
- 희귀도 측정: 고유한 데이터가 많아질수록 더 긴 0000... 패턴이 나올 확률 증가
- 각 버킷의 최대값 기록
- 전체 추정치 추정
특징
복수의 레지스터 사용
- 해시값의 일부를 버킷(레지스터) 선택에 사용하여 충돌 방지
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. 지리적 공간 인덱스
'Database > Redis' 카테고리의 다른 글
[실전 레디스] 2-4. 자료형과 기능: 공통 명령어 (0) | 2025.03.21 |
---|---|
[실전 레디스] 2-3. 자료형과 기능: 보조 기능 (0) | 2025.03.21 |
[실전 레디스] 2-1. 자료형과 기능: 기본 자료형 (0) | 2025.03.20 |
[실전 레디스] 1. 레디스의 시작 (0) | 2025.03.19 |
[Redis][Community Edition] 2-7. Manage Redis: Scale with Redis Cluster (0) | 2024.09.08 |