BITFIELD

Redis 開発者教育の申込 Redis 定期点検/技術サポート
Redis Technical Support
Redis エンタープライズサーバー
Redis Enterprise Server

BIT 配列(array)で数値演算(operation)

メモリを節約するためのデータ構造で、ビット(bit)配列として数値を保存・演算します。
例えば 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 1番目の 4ビットに 2 を保存
結果>1) (integer) 0 以前の値が返されます。
コマンド>bitfield key set u4 4 4 2番目の 4ビットに 4 を保存
結果>1) (integer) 0
コマンド>bitfield key set u4 8 6 3番目の 4ビットに 6 を保存
結果>1) (integer) 0

照会 GET

Example

コマンド>bitfield key get u4 0 1番目の 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 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 の場合: 1番目の 4ビット指定: #0、2番目の 4ビット指定: #1、3番目の 4ビット指定: #2 など
u8 または i8 の場合: 1番目の 8ビット指定: #0、2番目の 8ビット指定: #1、3番目の 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 返事がかかってなれば、メールでお知らせします。