umesoのブログ

答えがでるまで 考えて 考えて 考える

いまさらRedisをさわってみる

概要

普段からRedisを使ってセッション管理をしているが、アプリケーション側のフレームワーク設定でなんとなくで使っていた。
なので、DockerにてRedis環境をつくり、いろいろと試してみることにした。

Redisとは

  • Redis = REmote DIctionary Server の略です。
  • Key-Value型 の NoSQL データベースです。
  • すべてのデータセットをメモリ内に読み込みます(インメモリ)
  • 永続化ができます
  • 他にも色々あります(こちら

環境準備

Dockerにてredis環境を準備する。

# docker imageを取得
docker pull redis

# イメージを確認
docker image ls

# コンテナを作成
docker run --name redis_test -d redis

# コンテナが起動していることを確認
docker ps -l

# redisにログイン
docker exec -it redis_test /bin/bash

Redisをさわってみる

  • redis-cliコマンドを使用して対話的に実行する
  • KeyとValueのペアでデータを保存する
  • Valueには型がある

Strings型を保存する

$ redis-cli

127.0.0.1:6379> set key01 value001
OK

127.0.0.1:6379> get key01
"value001"

# value02で上書き
127.0.0.1:6379> set key01 value002
OK

127.0.0.1:6379> get key01
"value002"

最も一般的なKVSのデータ型で、画像も保存できる。
Session管理のためsession-id:値(Json)でデータを保存する。

Hash型で保存する

$ redis-cli

127.0.0.1:6379> hset hash_key name test
(integer) 1

127.0.0.1:6379> hset hash_key mail *****@test.com
(integer) 1

127.0.0.1:6379> hset hash_key tel 090-0000-0000
(integer) 1

127.0.0.1:6379> hgetall hash_key
1) "name"
2) "test"
3) "mail"
4) "*****@test.com"
5) "tel"
6) "090-0000-0000"

127.0.0.1:6379> hget hash_key name
"test"

127.0.0.1:6379> hget hash_key mail
"*****@test.com"

127.0.0.1:6379> hget hash_key tel
"090-0000-0000"

key,field,valueを設定できる。
keyを指定すれば全て取得できて、key,fieldを指定すればvalueを取得する。
Jsonを保存するとkeyで全て、key,fieldで要素ごとに取り出したりできる。

List型で保存する

$ redis-cli

# 先頭に追加
127.0.0.1:6379> lpush key01 value001
(integer) 1

127.0.0.1:6379> lpush key01 value002
(integer) 2

127.0.0.1:6379> lpush key01 value003
(integer) 3

# 末尾に追加
127.0.0.1:6379> rpush key01 value004
(integer) 4

127.0.0.1:6379> rpush key01 value005
(integer) 5

127.0.0.1:6379> rpush key01 value006
(integer) 6


# 全て取得
127.0.0.1:6379> lrange key01 0 -1
1) "value003"
2) "value002"
3) "value001"
4) "value004"
5) "value005"
6) "value006"

keyに対して複数の値を設定する

データを削除する

$ redis-cli

# 現在使用しているDBのデータを削除する
127.0.0.1:6379> flushdb
OK

おわり

実際に試してみて理解が深まった。
monitorコマンドでアプリケーションからアクセスしてみたら、セッション情報を保存している動作も確認できた。
画像を保存できることに興味があるので、後ほど試してみようと思いました。