하야시 쇼고 님의 "실전 레디스" 책을 정리한 포스팅 입니다.
- 보조 자료형은 모든 자료형에서 사용될 수 있음
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 요청자 수, 트랜잭션 수)
동작 과정
- 각 원소를 해싱 및 분할
- 일부 비트는 어느 버킷에 저장할지 선택하는데 사용
- 나머지 비트는 선행 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] 2. Understanding Data Types (0) | 2024.09.05 |