ScalaのSprayでアプリを作るときに、セッション管理用のキャッシュサーバーがほしいなと思ってRedisを使ってみることにしました
今日始めて触るので間違ったことを書いてあったらご指摘下さい
1.brewでRedisをインストールする
まずはRedisをインストールしていきましょう コマンドはbrew install redis
になります。
brew install redis
==> Downloading https://homebrew.bintray.com/bottles/redis-3.0.2.mavericks.bottle.tar.gz
######################################################################## 100.0%
==> Pouring redis-3.0.2.mavericks.bottle.tar.gz
==> Caveats
To have launchd start redis at login:
ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents
Then to load redis now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist
Or, if you don't want/need launchctl, you can just run:
redis-server /usr/local/etc/redis.conf
==> Summary
🍺 /usr/local/Cellar/redis/3.0.2: 9 files, 892K
以上のように表示されていれば問題無いと思います
Redisがインストールされているかとバージョンの確認です
which redis-server
/usr/local/bin/redis-server
redis-server -v
Redis server v=3.0.2 sha=00000000:0 malloc=libc bits=64 build=1d187ed92c2a6b24
今回はRedisの自動起動ONにしないのでMacで自動起動設定したい方は、こちらの参考資料をご覧になって下さい
僕も基本ここを参考にさせて頂きました
Mac OS X(Mavericks)にRedisをインストール+動作確認
2.Redisを起動する
では早速Redisを起動してみます コマンドは以下の通りですredis-server
Nginxみたいに単純で良いですね
起動されているか確認するコマンドは
ps | grep redis-server
以下のように表示されれば起動しています
13051 ttys005 0:00.25 redis-server *:6379
RedisやmemcachedはKVS(key value store)と呼ばれていて、キーと値のセットでデータを格納する仕組みです
Mapや連想配列みたいなものと思っています
次にデータを登録してみましょう
Redisの対話モードを起動します
このように表示されます
redis-cli
127.0.0.1:6379>
データの登録方法は
set キー 値
というような感じで登録します
ではやってみましょう
127.0.0.1:6379> set scala happy-life
OK
OKが出たら登録されます
登録データを取得する場合は
get キー
で取得できます
127.0.0.1:6379> get scala
"happy-life"
おめでとうございます
Scalaを手に取ると幸せになれました
3.データを保存する
RedisはインメモリKVSといってメモリ上にデータを保持することによってデータのやり取りを高速に行うことが出来ますが、メモリ上に保持しているということは途中で落ちてしまうとデータは消えてしまいますRedisがmemcachedと違うところは
Redisをctrl + c
で終了した際に、redis-serverを実行したディレクトリにdump.rdbというファイルが作成されそこにデータが保持されます
サーバー起動中にsetでデータを追加してもdump.rdbにはデータは追加されませんが(confで設定可能)、サーバー起動中にデータを保存したい場合は以下のコマンドで保存できます
bdsave
「back ground save」
の略だと思われます
コマンド実行後にdump.rdbを確認するとデータが増えているのが確認できます
いちいちコマンド入力しないといけないのかと思いましたが
Redisには時間ごとに更新データを保存する機能があるようです
brewでインストールしたら、以下のファイル
/usr/local/etc/redis.conf
の中に
save 900 1
save 300 10
save 60 10000
という項目があると思います
これは上から
1回の更新があった場合15分後に保存
10回の更新があった場合5分後に保存
10000回の更新があった場合1分後に保存
という意味で、全てをコメントアウトすると自動保存がOFFになるとのことです
では自動保存が効いているか確認してみましょう
10件以上データを保存して5分ほど待ってみます
set key1 val1
set key2 val2
set key3 val3
set key4 val4
set key5 val5
set key6 val6
set key7 val7
set key8 val8
set key9 val9
set key10 val10
set key11 val11
10分後…
データが追加されて………なーーーーーい!!
これは話が違いますね
どういうことでしょうか
confは初期状態で、何もいじっていないのですが
確かにsaveの項目は有効になっていたはずです
起動時の設定などがあるのでしょか
まあkillコマンドでredisを終了させても最後の瞬間にdump.rdbに保存されてるようなので大丈夫でしょう(適当
最後に想定外なことも起きましたが
このようにRedisは結構簡単に導入できそうなので試してみてはいかがでしょうか
かなり雑な終わり方ですが、今度はSprayからRedisに値をセット、取得してみることにします
では