Redis データ型
Redis は主に以下のデータ型をサポートしています:
- string(文字列):基本的なデータ格納単位で、文字列、整数、または浮動小数点数を格納できます。
- hash(ハッシュ):キーバリューペアの集合で、複数のフィールドを格納できます。
- list(リスト):シンプルなリストで、一連の文字列要素を格納できます。
- set(セット):順序なしの集合で、重複しない文字列要素を格納できます。
- zset(sorted set:ソート済みセット):セットに似ていますが、各要素にはスコア(score)が関連付けられています。
- ビットマップ(Bitmaps):文字列型に基づいており、各ビットに対して操作できます。
- ハイパーログログ(HyperLogLogs):基数統計に使用され、集合内の一意な要素数を推定できます。
- 地理空間(Geospatial):地理位置情報の格納に使用されます。
- パブリッシュ/サブスクライブ(Pub/Sub):メッセージ通信パターンであり、クライアントがメッセージチャンネルを購読し、そのチャンネルに公開されたメッセージを受信できます。
- ストリーム(Streams):メッセージキューやログ保存に使用され、メッセージの永続化と時間順の並び替えをサポートします。
- モジュール(Modules):Redis はモジュールの動的読み込みをサポートしており、Redis の機能を拡張できます。
String(文字列)
string は redis の最も基本的な型です。Memcached とまったく同じ型と考えることができ、1 つの key が 1 つの value に対応します。
string 型はバイナリセーフです。つまり、redis の string には、jpg 画像やシリアライズされたオブジェクトなど、あらゆるデータを含めることができます。
string 型は Redis の最も基本的なデータ型であり、string 型の値は最大 512MB まで格納できます。
よく使うコマンド
SET key value:キーの値を設定します。GET key:キーの値を取得します。INCR key:キーの値を 1 増やします。DECR key:キーの値を 1 減らします。APPEND key value:値をキーの値の末尾に追加します。
例
redis 127.0.0.1:6379> SET サンプル "サンプル" OK redis 127.0.0.1:6379> GET サンプル "サンプル"
上記の例では、Redis のSETとGETコマンドを使用しました。キーは サンプル で、対応する値はサンプル。
注意:1 つのキーは最大 512MB まで格納できます。
Hash(ハッシュ)
Redis hash はキーバリュー(key=>value)ペアの集合であり、小規模な NoSQL データベースに似ています。
Redis hash は string 型の field と value のマッピングテーブルであり、オブジェクトの格納に特に適しています。
各ハッシュには最大 2^32 - 1 個のキーバリューペアを格納できます。
HSET key field value:ハッシュテーブル内のフィールドの値を設定します。HGET key field:ハッシュテーブル内のフィールドの値を取得します。HGETALL key:ハッシュテーブル内のすべてのフィールドと値を取得します。HDEL key field:ハッシュテーブル内の1つ以上のフィールドを削除します。
よく使うコマンド
例
DEL サンプル以前のテストで使用したキーを削除するために使います。そうしないとエラーが発生します:(error) WRONGTYPE Operation against a key holding the wrong kind of value

redis 127.0.0.1:6379> DEL サンプル redis 127.0.0.1:6379> HMSET サンプル field1 "Hello" field2 "World" "OK" redis 127.0.0.1:6379> HGET サンプル field1 "Hello" redis 127.0.0.1:6379> HGET サンプル field2 "World"
この例では、Redis のHMSET, HGETコマンドを使用し、HMSET2 つのfield=>valueペアを設定し、HGET で対応するfield対応するvalue。
List(リスト)
Redis リストはシンプルな文字列リストで、挿入順に並べられます。リストの先頭(左)または末尾(右)に要素を追加できます。
リストには最大 2^32 - 1 個の要素を格納できます。
よく使うコマンド
LPUSH key value:値をリストの先頭に挿入します。RPUSH key value:値をリストの末尾に挿入します。LPOP key:リストの最初の要素を削除して取得します。RPOP key:リストの最後の要素を削除して取得します。LRANGE key start stop:リストの指定範囲内の要素を取得します。
例
redis 127.0.0.1:6379> DEL サンプル redis 127.0.0.1:6379> lpush サンプル redis (integer) 1 redis 127.0.0.1:6379> lpush サンプル mongodb (integer) 2 redis 127.0.0.1:6379> lpush サンプル rabbitmq (integer) 3 redis 127.0.0.1:6379> lrange サンプル 0 10 1) "rabbitmq" 2) "mongodb" 3) "redis" redis 127.0.0.1:6379>
Set(セット)
Redis の Set は string 型の順序なし集合です。
集合はハッシュテーブルで実装されているため、追加、削除、検索の計算量はすべて O(1) です。
よく使うコマンド
SADD key value:集合に1つ以上のメンバーを追加します。SREM key value:集合から1つ以上のメンバーを削除します。SMEMBERS key:集合内のすべてのメンバーを返します。SISMEMBER key value:値が集合のメンバーであるかどうかを判定します。
sadd コマンド
string 要素を key に対応する set 集合に追加します。成功すると 1 を返し、要素がすでに集合内にある場合は 0 を返します。
sadd key member
例
redis 127.0.0.1:6379> DEL サンプル redis 127.0.0.1:6379> sadd サンプル redis (integer) 1 redis 127.0.0.1:6379> sadd サンプル mongodb (integer) 1 redis 127.0.0.1:6379> sadd サンプル rabbitmq (integer) 1 redis 127.0.0.1:6379> sadd サンプル rabbitmq (integer) 0 redis 127.0.0.1:6379> smembers サンプル 1) "redis" 2) "rabbitmq" 3) "mongodb"
注意:上記の例では rabbitmq が 2 回追加されましたが、集合内の要素の一意性により、2 回目に挿入された要素は無視されます。
集合内の最大メンバー数は 232- 1(4294967295、各集合には40億以上のメンバーを格納できます)。
zset(sorted set:ソート済みセット)
Redis の zset は set と同じく string 型要素の集合であり、重複するメンバーは許可されません。異なる点は、各要素に double 型のスコアが関連付けられていることです。redis はこのスコアによって集合内のメンバーを小さい順に並べ替えます。
zset のメンバーは一意ですが、スコア(score)は重複してもかまいません。
よく使うコマンド
ZADD key score value:ソート済みセットに1つ以上のメンバーを追加するか、既存メンバーのスコアを更新します。ZRANGE key start stop [WITHSCORES]:指定された範囲内のメンバーを返します。ZREM key value:ソート済みセットから1つ以上のメンバーを削除します。ZSCORE key value:ソート済みセット内のメンバーのスコア値を返します。
zadd コマンド
要素を集合に追加します。要素が集合内に存在する場合は対応するスコアを更新します。
zadd key score member
例
redis 127.0.0.1:6379> DEL サンプル redis 127.0.0.1:6379> zadd サンプル 0 redis (integer) 1 redis 127.0.0.1:6379> zadd サンプル 0 mongodb (integer) 1 redis 127.0.0.1:6379> zadd サンプル 0 rabbitmq (integer) 1 redis 127.0.0.1:6379> zadd サンプル 0 rabbitmq (integer) 0 redis 127.0.0.1:6379> ZRANGEBYSCORE サンプル 0 1000 1) "mongodb" 2) "rabbitmq" 3) "redis"
その他の高度なデータ型
HyperLogLog
- 基数推定アルゴリズムに使用されるデータ構造です。
- 一意な値の近似値を統計するためによく使用されます。
Bitmaps
- ビット配列であり、文字列に対してビット操作を行うことができます。
- ブルームフィルタなどのビット操作を実装するためによく使用されます。
Geospatial Indexes
- 地理空間データを処理し、地理空間インデックスと半径クエリをサポートします。
- ログデータ型であり、時系列データをサポートします。
- メッセージキューやリアルタイムデータ処理に使用されます。