Redis データ構造(Structure)の照会と保存
データ構造(Collection)
Redis はさまざまなデータ構造(Structure)を提供する。
Redis でのデータ表現の基本型は、1つの Key と1つ以上の Field/Element 値で構成される。
- Key
- ASCII value を保存する。
- Value (Field/Element)
- 基本的に String データを保存する。
- Container タイプのデータを保存する。
- Container タイプ
- Hash、List、Set、Sorted Set などを含む。
Strings

String は Redis value のもっとも基本的なデータ型である。value に文字や数字などを保存する。保存時に数字と文字を別途区別しない。
Redis String は binary safe である。これは Redis string が JPEG image や serialized Ruby object のようなあらゆる種類の data を含められることを意味する。
String value は最大 512 MB の長さを持つことができる。
Strings Redis コマンド
キー・値構造でデータを保存し、照会してみる。
| コマンド | 文法 | 説明 |
|---|---|---|
set |
set key |
key-value を保存する。 |
get |
get key |
key に該当する value を照会する。 |
del |
del key |
key を削除する。 |
127.0.0.1:6379> set devkuma 1000
OK
127.0.0.1:6379> get devkuma
"1000"
127.0.0.1:6379> del devkuma
(integer) 1
127.0.0.1:6379> get devkuma
(nil)
127.0.0.1:6379>
Lists

List は単純に挿入順で整列された String list である。String 型が配列構造になったものと考えればよい。
新しい要素を list の前または後ろに追加できる。最大約40億要素まで保持できるとされる。
| コマンド | 文法 | 説明 |
|---|---|---|
lpush |
LPUSH key element [element ...] |
left push であり、左から、index は 0 からデータを保存する。 |
lpop |
LPOP key |
left pop であり、list の index 0 からデータを抽出する。 |
rpush |
RPUSH key element [element ...] |
right push であり、右から、つまり index last からデータを保存する。 |
rpop |
RPOP key |
right pop であり、list の index last からデータを抽出する。 |
lrange |
LRANGE key start stop |
list のデータを start から end まで抽出する。 lrange で end を -1 と宣言すると、その list のデータをすべて抽出する。 |
LPUSH コマンドは新しい要素を head の前に追加し、RPUSH は後ろに追加する。empty key に実行される場合は new list が作成されて追加される。
127.0.0.1:6379> lpush fruit apple
(integer) 1
127.0.0.1:6379> lpush fruit banana
(integer) 2
127.0.0.1:6379> lpush fruit orange
(integer) 3
127.0.0.1:6379> lrange fruit 0 2
1) "orange"
2) "banana"
3) "apple"
127.0.0.1:6379>
Sets

Set は整列されていない String collection である。List 型からインデックスがなくなった型である。Value に重複がない。Lists より高速に処理できる。
ランダムにデータを抽出できるという意味では、機械学習などに使用できるかもしれない。
| コマンド | 文法 | 説明 |
|---|---|---|
sadd |
SADD key member [member...] |
set の key に member を追加する。 |
srem |
SREM key member [member...] |
set の key から member を削除する。 |
smembers |
SMEMBERS key |
set の key のすべての member を照会する。 |
sadd コマンドで key animal に要素を追加してみる。
127.0.0.1:6379> sadd animal dog
(integer) 1
127.0.0.1:6379> smembers animal
1) "dog"
127.0.0.1:6379> sadd animal cat cow
(integer) 2
127.0.0.1:6379> smembers animal
1) "dog"
2) "cat"
3) "cow"
srem コマンドで key animal から要素を削除してみる。
127.0.0.1:6379> srem animal cat
(integer) 1
127.0.0.1:6379> smembers animal
1) "dog"
2) "cow"
127.0.0.1:6379>
全体を削除するには del コマンドを使用する。
127.0.0.1:6379> del animal
(integer) 1
127.0.0.1:6379> smembers animal
(empty array)
127.0.0.1:6379>
Sorted Sets

Sorted set は Redis set と似た、重複しない String の集合である。 Set 型に score という概念が付いたものである。ここでも Value に重複はない。score 順に整列したり、score に対してしきい値処理をしたりできる。ゲームのリアルタイムランキング表示などに使えそうである。
Hashes

Hashes の場合、key 1つに複数の field と value のペアで構成される。Set に文字列で指定できる field という概念が付いたものである。
すべての hash は最大 2^32 - 1 個の field-value ペア、つまり約40億個以上を保存できる。
| コマンド | 文法 | 説明 |
|---|---|---|
hset |
HSET key field [field value...] |
1つまたは複数の値を設定する。 |
hget |
HGET key field |
1つまたは複数の値を取得する。 |
Bitmaps and HyperLogLogs
Redis はまた、実際には String base type を基盤としながら独自の意味を持つ data type である Bitmap および HyperLogLogs もサポートする。