前回の記事の続きで、
本記事では、List型とHash型を取り上げようと思います。
String型と同じく、これらのデータ型も重要なので、
しっかりマスターしてもらえると幸いです。
これらのデータ型は、たくさんのコマンドがあるので、
ある種のチートシート的にも使えるよう執筆しました。
List型
List型はわりとそのまんまで、
RedisのString型のリストです。
順序を保持して、値を保存します。
試しに何か格納してみます。
LPUSH sample_list 123 153 test
LRANGE sample_list 0 -1
sample_listというキーに123、153、testを
格納し、LRANGEで0(最初から)から-1(リストの最後)を取得します。
List型のコマンド
一覧は、下記のドキュメントに詳しく書かれております。
https://redis.io/commands/?group=list
LPOP
キーで指定したリストから、最初の要素を消して、
その値を返すコマンドです。
LPOP sample_list
LPOP sample_list 2
keyのあとに数値を指定すると、
その数まで削除します。
LPUSH
こちらは、LPOPの逆で、
指定した値をすべて先頭に挿入します。
LPUSH sample_list 123 153 test
LPUSH sample_list testtest
LRANGE sample_list 0 -1
RPOPとRPUSH
これは、指定した値をそれぞれ
末尾に対して操作するLPOPとLPUSHに該当します。
LINDEX
キーのリストの、指定したインデックスの位置にある要素を返します。
下記はindex 1の要素を返します。
LINDEX sample_list 1
LINSERT
こちらは、簡単な探索ができるようなコマンドで、
キーの直後(AFTER)または直前(BEFORE)に、
起点となる要素(下記の場合、153)の後(前)に
指定した要素(下記の場合、110)を挿入します。
LINSERT sample_list BEFORE 153 110
LRANGE sample_list 0 -1
pivot(検索する起点となる要素)がない場合、
-1を返します。
redis-cli> LINSERT sample_list BEFORE not_found 110
(integer) -1
そもそもkey自体が存在しない場合は、
0を返します。
redis-cli> LINSERT sample_listee BEFORE 153 110
(integer) 0
LLEN
シンプルにリストの長さを返します。
LLEN sample_list
LRANGE
こちらは、既に何回か使っているが、
List型における、事実上のKeysコマンドに相当するかと思われる。
すべての要素を確認する場合は、
下記のようにする
LRANGE sample_list 0 -1
始点は0から始まり、末尾は-1と表現できるので、
最初から最後まで取得するという意味になる。
これ以外にも、文字通り範囲指定的な使い方もできて、
末尾から2つの要素を取得するなら、
LRANGE sample_list -2 -1
最初から、3つの要素を取得するなら、
LRANGE sample_list 0 2
といった感じだ。
LSET
こちらは、LISTにおける、
SETコマンドのようなもので、
indexを指定して、その要素を更新する。
LSET sample_list 0 first_test
Hash型
Hash型は、List型の階層を深くしたような、
データ型で、フィールドと値を対として持つデータ型です。
ちょうど、RubyのHashと似ているので、
イメージとしては、こんな感じですね。
-
参考【Ruby】ハッシュとシンボルについて 省略記法やシンボルと文字列の違い
本記事では、Rubyの文法の中でも特徴的な、ハッシュとシンボルについて紹介します。 特にシンボルについては、他のプログラミング言語では、あまり見かけないデータ構造かと思います。 こうしたハッシュとシン ...
続きを見る
平たいイメージで言うと、
親キーと子キー(フィールド)と値があるような感じです。
parent: (child1 => 'value1', child2 => 'value2')
上記のようなイメージです。
実際にコマンドを使うと、
HSET parent child1 value1 child2 value2
HGET parent child2
このような感じですかね。
Hash型のコマンド
ドキュメントは、下記です。
https://redis.io/commands/?group=hash
HDEL
こちらはシンプルに要素を削除する系のコマンドで、
キーとフィールドを指定する。
HDEL parent child2
HEXISTS
こちらはhash版のEXISTSコマンドに相当するものかと思われます。
フィールドが存在すれば1を、存在しなければ0を返します。
redis-cli> HEXISTS parent child1
(integer) 1
redis-cli> HEXISTS parent child2
(integer) 0
HGET
先程も軽く使ったが、
指定したフィールドに関連づく値を返します。
HGET parent child1
HGETALL
これはListでいう、LRANGE、
汎用コマンドでいう、KEYSコマンドに近いもので、
キーで指定した、フィールドと値を返します。
redis-cli> HSET parent child3 test
(integer) 1
redis-cli> HGETALL parent
1) "child1"
2) "value1"
3) "child3"
4) "test"
HKEYS
こちらは、フィールドだけを返す、HGETALLのようなコマンド
redis-cli> HKEYS parent
1) "child1"
2) "child3"
HVALS
こちらは、フィールドの値だけを返す、HGETALLのようなコマンド
redis-cli> HVALS parent
1) "value11"
2) "test"
3) "value22"
HLEN
フィールドの数を返します。
HLEN parent
HSET
キーで指定したハッシュについて、
フィールドと値のペアを挿入します。
先程も軽く使いましたね。
既にフィールドが存在する場合は、上書きとなります。
HSET parent child1 value11 child2 value22
HINCRBY
String型にも、INCRBYというコマンドがあったが、
そちらとほとんど同様。フィールドの値が数値のときのみ使えるコマンド。
キーやフィールドがない場合は、0基準で加算が行われる。
-
参考【Redis基礎】汎用コマンドとString型について対応するコマンド
本記事では、Redisのデータ型のString型と、データ型に関わらない、汎用コマンドを解説します。 前回の記事では、Redis自体がどういうものなのかについて、解説したので、本記事では汎用コマンドや ...
続きを見る
HINCRBY parent child7 3