비트맵

강코딩·2025년 10월 24일

레디스

목록 보기
10/21

🧩 2.7 대표 기능과 관련 명령어

Redis는 문자열, 리스트, 해시 등의 자료형 외에도 특정 기능에 특화된 보조 자료형을 제공합니다.
그중 하나가 바로 비트맵(BitMap) 으로, 데이터를 비트 단위로 조작하여 메모리를 매우 효율적으로 사용하는 기능입니다.

⚙️ 2.7.1 비트맵(BitMap)
🔹 개념

비트 배열(Bit Array) 형태로 데이터를 저장.

각 비트(0 또는 1)는 특정 상태를 표현할 수 있음 (예: 방문 여부, 로그인 여부 등).

내부적으로는 String형으로 저장되지만, 비트 단위 연산이 가능하여 특수 용도에 적합.

🔹 동작 예시
SETBIT mybit 100 1 # 100번째 비트를 1로 설정
GETBIT mybit 100 # 100번째 비트 값 확인 → 1
GETBIT mybit 101 # 101번째 비트 값 확인 → 0
TYPE mybit # 자료형 확인 → string

💡 특징

비트 단위 연산 가능 (0, 1로 표현되는 최소 단위 데이터)

메모리 효율이 매우 높음

비트 위치 검색, 카운트, 비교 연산 가능

대용량 실시간 데이터 분석에 적합 (예: 로그인/방문자 추적)

💼 활용 사례

사용자 방문 여부 기록

출석 체크 시스템

IoT 센서 상태 저장

실시간 로그 수집/분석

🔧 주요 명령어
명령어 설명 시간 복잡도
SETBIT key offset value 지정 비트를 1 또는 0으로 설정 O(1)
GETBIT key offset 지정 위치 비트값 조회 O(1)
BITCOUNT key [start end][BYTE BIT] 비트 중 1의 개수 세기
BITOP operation destkey key [key ...] 비트 연산(AND, OR, XOR, NOT) 결과 저장 O(N)
BITPOS key bit [start end] 지정 값(0 또는 1)이 처음 나타나는 위치 찾기 O(N)
BITFIELD key GET/SET/INCRBY 여러 비트 필드를 동시에 조작 O(1)
BITFIELD_RO key GET ... 읽기 전용 BITFIELD (Redis 6.2 이상) O(1)
🧮 BITFIELD 하위 명령어 상세
하위 명령 기능
GET 지정 비트 범위의 값을 가져옴
SET 지정 비트 범위에 값 설정
INCRBY 지정 범위의 값을 증가
`OVERFLOW [WRAP SAT

예:
BITFIELD counter INCRBY i8 100 1 OVERFLOW SAT
→ 100번째 비트부터 8비트 정수형으로 1 증가, 오버플로우 시 최대값 유지

🧩 비트맵 실습 예시

2022-08-29 방문자 표시

SETBIT visitor:20220829 100 1
SETBIT visitor:20220829 200 1
SETBIT visitor:20220829 300 1

다음 날 방문자 표시

SETBIT visitor:20220830 200 1
SETBIT visitor:20220830 400 1
SETBIT visitor:20220830 500 1
SETBIT visitor:20220830 600 1
SETBIT visitor:20220830 700 1

두 날짜 방문자 통합 (OR 연산)

BITOP OR visitor:20220829-20220830 visitor:20220829 visitor:20220830

전체 방문자 수 세기

BITCOUNT visitor:20220829-20220830

결과:

(integer) 7

→ 7명의 고유 방문자 수 확인 가능.

📊 비트맵 vs Set
항목 비트맵(BitMap) Set형
저장 단위 비트(0/1) 문자열
메모리 효율성 매우 높음 상대적으로 낮음
조회/통계 성능 빠름 느림 (요소 탐색 필요)
활용 예시 방문자/로그 추적 중복 없는 사용자 목록 관리
✅ 요약

비트맵은 대량의 데이터를 매우 작은 메모리로 관리 가능.

0/1 상태값 기반의 실시간 통계에 유용.

SETBIT / GETBIT / BITCOUNT 가 핵심 명령.

BITOP / BITFIELD 로 고급 비트 연산 가능.

활용 예시: 출석체크, 방문자 집계, IoT 상태관리 등.

profile
주니어 풀스택개발자

0개의 댓글