BITFIELD

레디스 개발자 교육 신청 레디스 정기점검/기술지원
Redis Technical Support
레디스 엔터프라이즈 서버
Redis Enterprise Server

BIT 배열(array)로 숫자 연산(operation)

메모리를 절약하기 위한 데이터 구조로 비트 배열로 숫자를 저장, 연산한다.
예를 들어, 0~15 사이의 숫자를 많이 저장해야 한다면 일반적으로 사용하는 4 bytes(32bits) integer를 사용하지 말고 4 bits integer를 사용하면 메모리를 많이 절약할 수 있다.

  • 저장: bitfield key SET type offset value -> bitfield key SET u4 0 1
  • 조회: bitfield key GET type offset -> GET u4 0
  • 증가/감소: bitfield key INCRBY type offset increment -> INCRBY u4 0 1
  • type: 숫자 표시 데이터 타입, 부호 있는 숫자 i, 부호 없는 숫자 u, 표시할 숫자가 차지할 비트수
    부호 없는(unsigned) 4비트 숫자: u4, 부호 없는 8비트 숫자: u8
    부호 있는(signed) 4비트 숫자: i4, 부호 있는 8비트 숫자: i8
  • offset: 비트 위치를 나타냅니다. u4의 경우 0, 4, 8, ...
  • value: 값, 정수(integer)만 사용 가능합니다.

저장 SET

Example

명령>bitfield key set u4 0 2 첫 번째 4비트에 2를 저장
결과>1) (integer) 0 이전 값이 리턴됩니다.
명령>bitfield key set u4 4 4 두 번째 4비트에 4를 저장
결과>1) (integer) 0
명령>bitfield key set u4 8 6 세 번째 4비트에 6를 저장
결과>1) (integer) 0

조회 GET

Example

명령>bitfield key get u4 0 첫 번째 4비트 값을 조회
결과>1) (integer) 2
명령>bitfield key get u4 4
결과>1) (integer) 4
명령>bitfield key get u4 8
결과>1) (integer) 6

증가/감소 INCRBY

Example

명령>bitfield key incrby u4 0 1 첫 번째 4비트 값에 1 증가
결과>1) (integer) 3 결과 값을 보여줍니다.
명령>bitfield key incrby u4 0 2
결과>1) (integer) 5
명령>bitfield key incrby u4 0 -3 음수 사용 가능
결과>1) (integer) 2

offset #: 아이템 단위로 지정

'#'을 사용해서 offset을 비트 위치가 아닌 아이템 단위로 지정할 수 있습니다.
u4 또는 i4의 경우: 첫 번째 4비트 지정: #0, 두 번째 4비트 지정: #1, 세 번째 4비트 지정:#2 등
u8 또는 i8의 경우: 첫 번째 8비트 지정: #0, 두 번째 8비트 지정: #1, 세 번째 8비트 지정:#2 등
사용자(개발자)가 비트수를 계산할 필요가 없습니다.

Example

명령>bitfield key set u4 #0 2
결과>1) (integer) 0
명령>bitfield key get u4 #0
결과>1) (integer) 2
명령>bitfield key set u4 #0 2
결과>1) (integer) 4

옵션(SET,GET,INCRY)을 중복 사용 가능

Example

명령>bitfield key set u4 #0 1 set u4 #1 2
결과>1) (integer) 0
2) (integer) 0
명령>bitfield key set u4 #3 1 get u4 #1
결과>1) (integer) 0
2) (integer) 2
명령>bitfield key incrby u4 #3 2 set u4 #4 5
결과>1) (integer) 3
2) (integer) 0

Overflow, underflow 처리 방식 지정

값이 최댓값을 초과하거나 최솟값 미만으로 되었을 때 값을 처리하는 방식을 지정합니다.

  • WRAP: u4 15에 1을 더하면 0이 됩니다. i4 7에 1을 더하면 -8이 됩니다. 디폴트입니다.
  • SAT: u4 10에 10을 더하면 15가 됩니다. i4 5에 5을 더하면 7이 됩니다. 최댓값 또는 최솟값에서 멈춥니다.
  • FAIL: u4 10에 10을 더하면 (nil)을 리턴합니다. i4 5에 5을 더하면 (nil)을 리턴합니다.
  • 명령 위치(순서): Overflow 다음에 있는 incrby에만 영향을 미칩니다.

WRAP

Example

명령>bitfield key set u4 #0 15
명령>bitfield key overflow wrap incrby u4 #0 1
결과>1) (integer) 0
명령>bitfield key set i4 #0 7
명령>bitfield key overflow wrap incrby i4 #0 1
결과>1) (integer) -8

SAT

Example

명령>bitfield key set u4 #0 10
명령>bitfield key overflow sat incrby u4 #0 10
결과>1) (integer) 15
명령>bitfield key set i4 #0 5
명령>bitfield key overflow sat incrby i4 #0 5
결과>1) (integer) 7

FAIL

Example

명령>bitfield key set u4 #0 10
명령>bitfield key overflow fail incrby u4 #0 10
결과>1) (nil)
명령>bitfield key set i4 #0 5
명령>bitfield key overflow fail incrby i4 #0 5
결과>1) (nil)


명령문

BITFIELD key [GET type offset] [SET type offset value]
[OVERFLOW WRAP|SAT|FAIL] [INCRBY type offset increment]

  • 이 명령은 version 3.2.0 부터 사용할 수 있다.
  • 논리적 처리 소요시간은 O(1)입니다.

<< BITCOUNT BITFIELD BITPOS >>

Email 답글이 올라오면 이메일로 알려드리겠습니다.