Redis データ構造(Structure)の照会と保存

Redis のデータ構造について説明する。String、List、Set、Sorted Set、Hash など。

データ構造(Collection)

Redis はさまざまなデータ構造(Structure)を提供する。

Redis でのデータ表現の基本型は、1つの Key と1つ以上の Field/Element 値で構成される。

  • Key
    • ASCII value を保存する。
  • Value (Field/Element)
    • 基本的に String データを保存する。
    • Container タイプのデータを保存する。
  • Container タイプ
    • Hash、List、Set、Sorted Set などを含む。

Strings

Redis データ型 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

Redis データ型 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

Redis データ型 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

Redis データ型 Sorted Sets

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

Hashes

Redis データ型 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 もサポートする。

参考