KVSのRedisがRDBとどう違うのか?実際に使っているところを見ながら確認したいと思い、「やる夫で学ぶ」シリーズとして作成してみました。基本ログに一言添えただけです。詳しい説明は載せていません。次の目的に使えるかと思います。
- Redisの雰囲気を掴みたい
- KVSでどんな風にデータを管理するのか知りたい
- 実際に使っているシミュレーションで学びたい
- Redisのサンプルを見たい
実際に下記のサンプルを色々変えて打ってみて、エラーを出したりして各コマンドの意味を掴んでいくと身につくと思います。
# 〜名簿管理〜
# String型、Hash型を学ぶ
# いきなり担任を務めることになったやる夫
# 名簿が手書きだったのでDBで管理して効率化を図ることにした。
# 使用したDBはKVSのRedis。KeyとValueのみで管理する2カラムだけのRDBのようだ。
# (・ω・)「まずはredisの全てのDBのデータを削除して綺麗にするお」
$ FLUSHALL
$ SET name yamada
$ SET sex man
$ SET class a
$ SET name suzuki
$ SET name
"suzuki"
# \(^o^)/「さっき登録したyamadaが上書きされてしまったお!」
$ SET user:1:name yamada
$ SET user:1:sex man
$ SET user:1:class a
$ SET user:2:name suzuki
$ SET user:2:sex woman
$ SET user:2:class b
$ KEYS user:1:*
1) "user:1:class"
2) "user:1:name"
3) "user:1:sex"
$ KEYS user:2:*
1) "user:2:sex"
2) "user:2:class"
3) "user:2:name"
# (・∀・)「これで複数の生徒を管理できるようになったお」
$ KEYS *
1) "user:2:sex"
2) "class"
3) "name"
4) "user:1:class"
5) "user:2:class"
6) "user:2:name"
7) "user:1:name"
8) "sex"
9) "user:1:sex"
# (`・ω・´)「余分なキーが入っているから削除するお」
$ DEL class
$ DEL name
$ DEL sex
$ DEL class
(integer) 0
# ....φ(・ω・` )「既に存在しないkeyの場合は0が返るのか」
$ KEYS *
1) "user:2:sex"
2) "user:1:class"
3) "user:2:class"
4) "user:2:name"
5) "user:1:name"
6) "user:1:sex"
$ MGET user:1:name user:1:sex user:1:class
1) "yamada"
2) "man"
3) "a"
$ MGET user:2:name user:2:sex user:2:class
1) "suzuki"
2) "woman"
3) "b"
# v(。・ω・。)「MGETを使えば一気に複数のkeyを取り出せるのか!これは便利だお!
# MSETというのもあるらしいから、これで登録するお!」
$ MSET user:3:name hiramatsu user:3:sex man user:3:klass a
$ MGET user:3:name user:3:sex user:3:class
1) "hiramatsu"
2) "man"
3) (nil)
# (;・∀・)「クラスが登録されてないお」
$ KEYS user:3:*
1) "user:3:sex"
2) "user:3:name"
3) "user:3:klass"
$ RENAME user:3:klass user:3:class
$ KEYS user:3:*
1) "user:3:class"
2) "user:3:sex"
3) "user:3:name"
# (ヽ´ω`)「どうやらclassをklassと書いていたようだったお。リネームして直したお」
# ( ・ω・)「今はどれくらいのデータが登録したかお?」
$ DBSIZE
(integer) 9
$ KEYS *
1) "user:2:sex"
2) "user:1:class"
3) "user:2:class"
4) "user:3:class"
5) "user:2:name"
6) "user:3:sex"
7) "user:3:name"
8) "user:1:name"
9) "user:1:sex"
# (ヽ´ω`)「たった9個だお。それでも管理が大変になってきたお」
$ FLUSHDB
$ DBSIZE
(integer) 0
# ( ´・ω・`)「現在のDBだけデータを削除して、やり直すお」
$ HMSET user:1 name yamada sex man class a
$ HMSET user:2 name suzuki sex woman class b
$ HMGET user:1 name sex class
1) "yamada"
2) "man"
3) "a"
# (´∀`*)「Hash型を使えば入力が楽になったお!1つのkeyで一人を管理できてわかりやすいお♪」
$ KEYS *
1) "user:2"
2) "user:1"
$ DBSIZE
(integer) 2
# (゚∀゚ )「データサイズで登録人数がわかるようになったお。これで担当クラスを把握しなくて済むお」
$ HSET user:3 name hiramatsu
(integer) 1
$ HMSET user:3 sex man class a
OK
# ( ・∀・)「 Mをつければ複数のKEYが登録できるのは、String型同じみたいだお。MultiのMかお?」
# ( ゚Ω゚) 「複数登録だと、なぜか返り値が数値からOKになっているお」
$ HKEYS user:3
1) "name"
2) "sex"
3) "class"
$ HVALS user:3
1) "hiramatsu"
2) "man"
3) "a"
$ HGETALL user:3
1) "name"
2) "hiramatsu"
3) "sex"
4) "man"
5) "class"
6) "a"
# ( ;∀;)「わざわざkey値を打たなくても、中身を一気に確認できたのかお..」