MacにRedisをインストールして使ってみる


ScalaのSprayでアプリを作るときに、セッション管理用のキャッシュサーバーがほしいなと思ってRedisを使ってみることにしました
今日始めて触るので間違ったことを書いてあったらご指摘下さい


<h3>1.brewでRedisをインストールする</h3>
まずは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をインストール＋動作確認](http://www.utano.jp/entry/2014/08/redis_install_for_mac "Mac OS X(Mavericks)にRedisをインストール＋動作確認")


<h3>2.Redisを起動する</h3>
では早速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を手に取ると幸せになれました



<h3>3.データを保存する</h3>
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に値をセット、取得してみることにします
では