bitfield
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
返事がかかってなれば、メールでお知らせします。
