どうも。データベースのredisについて、今日も書いていこうと思います。
redisは、データ型を持っています。
- String もっとも基本的なデータ型。個々の要素を格納しておく。
- List 複数の要素が順番に並べられている。一番右にデータを追加とか、一番左のデータを削除とか、いろんなことが出来る。
- Set 複数の要素を管理できる。重複を許さない。
- Sorted Set ソート済み集合。Setの特徴ももつが、並び替えなどが容易にできる。
- Hash 連想配列とも。ラベルと値をセットで保持する。
とまぁそんなこといってもよくわからないと思うので、具体例を出しながらコマンド操作と一緒に、それぞれの型についてみていこうと思います。
1.String型
主なコマンド
set key value キーと値を格納できる。
get key キーに対応した値をとることが出来る。
mset key value key value 複数のキーと値を格納できる。
mget key key 複数の、キーに対応した値をとることが出来る。
多分ですが、msetとかmgetの前のmってのは、manyの略かな?さて、実際にやってみましょう。
今回、名前と年齢、誕生日の格納を実際にやってみましょう。
こんな感じで、確かにしっかりと格納されていることがわかります。
前回のredisの記事でも少しふれましたが、incr/decrで1つ増やしたり減らしたり、incrby/decrbyで一気にいくつか増やしたり減らしたりできます。
やってみましょう。
はい。確かに年齢が指定した分だけ増えたり減ったりしています。
2.List型
List型では、1つのkeyに大して、複数のvalueを割り当てることが出来ます。
例えば、IT google yahoo apple facebook twitterとすると、ITというkeyで、後の5個のvalueを扱うことが出来ます。
主なコマンド
lpush 1番左に追加
rpush 1番右に追加
lpop 1番左を削除
rpop 1番右を削除
lrange A B A番目からB番目の要素を見る。すべての要素を見たいときは、0 -1とすればOK。
lindex key A A番目の要素を見る。
llen key 要素の大きさを見る。
という感じです。実際にやってみましょう。
追加と削除の画像が上ので、下のが要素の追加と長さ表示です。ちなみに、lindexとかllenのlってのは、Listの頭文字です。要素の添字は0から始まるので注意してください。
3.Set型
Set型は、集合の管理とかがすごくやりやすいです。コマンドを見た後、具体例で確認していきましょう。
主なコマンド
sadd 要素追加
srem 要素削除
smembers 一覧表示
sunion 和集合表示
sinter 積集合表示
sdiff 差集合表示
具体例を見ていきましょう。A社とB社の情報機器を管理しているとします。追加と削除が行われているのがわかるかと思います。
A社とB社がどんな情報機器を使っているのか?というのを例にやってみます。
A社とB社どちらかが使っているのはsunion,A社もB社も使っているのはsinter, A社は使ってるけどB社は使ってないのはsdiffで知ることが出来ます。
ちなみに、sunion,sinter,sdiffの後にstoreをつけて、新しい集合の名前、集合1、集合2とすると、その積集合や和集合、積集合の要素がが新しい集合に格納されます。
こんな感じです。
4.Sorted Set
値に対して数値をつけることにより、自動的に数値順に並び替えて格納される
zadd 追加
zrem 削除
zrange 一覧を見る
zrank ある要素のランクを見る
zrank 集合名 withscores 数値とセットで一覧を見る
やってみましょう。いろんな人のテストの結果を格納してみます。
こんな感じですね。点数とセットで見ると、しっかり小さい順にソートされて格納されているのがわかるかと思います。ゲームのランキングとかを管理するときに便利かと思います。
ちなみに、大きい順に並び替えたいときは、zrevrangeに変えればOKです。
5.Hash型
String型は、1つのkeyに1つのvalueだったんですが、Hash型では、valueをkeyのように使い、さらにそれにまたvalueを対応させるなんていうことが出来てしまいます。
例えば、userというkeyがあるとして、そこにnameというvalueを入れます。そして、そのnameに Yukiを対応させることで、nameというkeyでいろいろなものを対応させることが出来ます。
主なコマンド
hset/hmset 値を格納/複数格納
hget/hmget 値を取得/複数取得
hlen keyの数を調べる
hkeys keyの一覧を見る
hvals 値の一覧を見る
hgetall keyと値の一覧を見る
こんな感じになります。
みたらわかるように、値がないときは(nil)と返されます。
今までに見たもの全体共通のコマンド
keys * 現在あるkeyの一覧を表示
keys * 文字列* ある文字列を含むkeyの一覧を表示
exists 存在していたら1を、なければ0を返す
del keyを削除する
rename keyの名前を変更する
このように、今まで作ったデータ達をみたり、存在を確認したり、名前を変えることが出来ます。
sortコマンドについて
いろいろな並び替えが出来る。List型、Set型、Sorted Set型に対して選択できる。
例えば、List型でScoreを管理したしましょう。
普通にpushしていくと、見ての通り、入れた順番に並んでいるのがわかるかと思います。
これを並び替えるときに、sortを行います。普通にソートすると、小さいものから順に並びます。語尾にdescとつけると、大きいものから順番に並びます。
「成績上位者にしか興味ないぜ!」っていう時には、「sort score desk limit A番目から B人」っていう指定の仕方で抽出できます。
また、文字列も、語尾にalphaとつければ並び替えることが出来ます。先ほど作った、List型のITってやつの中身を並び替えてみましょう。
はい、しっかりアルファベット順に並んでいますね。
個々で紹介したもの以外にもとても便利な機能がたくさんあります。使いながらなれていってください。
ふぅ・・・ブログ始まって1番長い記事だ。