Syntax Error.

[Sy] Mac OS X(Mavericks)にRedisをインストール+動作確認

2014/08/12 (更新: 2016/10/18)

Mac OS X(Mavericks)Redis をインストールする手順と動作確認について。

※macOS(Sierra)へのインストールについても書きました。(動作確認についてはこの記事の「手動でredis-serverを起動」以降をそのまま参考にできるかと思います)

⇒ [Sy] macOS(Sierra) に 5分 で Redis の環境を作る手順 | Syntax Error.

インストール

Homebrewを使ってインストールできます。

$ brew install redis
==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/redis-2.8.9.maverick
######################################################################## 100.0%
==> Pouring redis-2.8.9.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/2.8.9: 10 files, 1.3M

インストールできました。バージョンを確認。

$ redis-server -v
Redis server v=2.8.9 sha=00000000:0 malloc=libc bits=64 build=9ccc8119ea98f6e1

自動起動の設定

インストール時のログにあるように、ログイン時に起動するには

$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents

として、~/Library/LaunchAgentshomebrew.mxcl.redis.plistのシンボリックリンクを作成します。

で、次のコマンドを実行。

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

何も表示されなければOKです。もし、以下のように

nothing found to load

と表示される場合は、-wオプションをつければうまくいくと思います。

$ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

起動したら、プロセスを確認。

$ ps ax | grep redis-server
  778   ??  S      0:00.05 /usr/local/opt/redis/bin/redis-server 127.0.0.1:6379
  789 s000  R+     0:00.00 grep redis-server

デフォルトのポート6379でredis-serverが起動しているはずです。これでMacを再起動しても自動でredis-serverが起動します。

自動で起動させたくない場合は、以下のコマンドで解除できます。(この先は自動起動を解除した状態で説明しています)

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

手動でredis-serverを起動

今度は手動でredis-serverを起動してみます。

カレントディレクトリはどこでもいいのですが、その場所に_dump.rdb_というデータのダンプが保存されるようになるので、必要に応じてディレクトリを移動しておいてください。

起動するディレクトリへ移動したら、redis-serverとコマンドを実行します。

$ redis-server
[33313] 11 Aug 01:06:13.427 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
[33313] 11 Aug 01:06:13.430 * Increased maximum number of open files to 10032 (it was originally set to 2560).
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 2.8.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in stand alone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 33313
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[33313] 11 Aug 01:06:13.431 # Server started, Redis version 2.8.9
[33313] 11 Aug 01:06:13.431 * The server is now ready to accept connections on port 6379

最初に「redis.confのパス指定がなかったからデフォルトのconfig使ってるよー」ってワーニング出てますが、とりあえず問題ないので続行。本来、こんな感じで設定ファイルのパスを指定するといいみたいです。

$ redis-server [設定ファイルのパス]

ちなみに、指定しなかった場合に読み込まれるデフォルトのconfigは/usr/local/etc/redis.confになります。

クライアント(redis-cli)を起動

redis-serverが起動したら、一緒にインストールされてるredis-cliというクライアントを起動して実際にRedisを操作してみます。

次のコマンドを実行すると、

$ redis-cli
127.0.0.1:6379>

と、プロンプトが表示されます。

あ、起動に失敗してたらこうなります。

$ redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>

こうなったら、一旦exitと入力してredis-cliを終了し、ps ax | grep redis-serverでredis-serverが起動しているかどうか確認し、起動してなかったらredis-serverを実行してください。

データを登録してみる

無事クライアントから接続できたら、せっかくなので試しにひとつデータを登録してみます。

Redisにはいくつか登録できるデータの型があるんですが、とりあえず基本となるString型での登録をやってみます。

String型はシンプルにkey-value型のデータです。登録するには、set [key] [value]というようにコマンドを入力します。例えば

127.0.0.1:6379> set key-test val-test
OK

とすると、key-testというkeyで、val-testというvalueが登録されます。OKと表示されれば登録成功です。

続けて登録されたkeyを指定して、valueを取得してみます。取得するときは、get [key]とコマンドを入力します。

127.0.0.1:6379> get key-test
"val-test"

ちゃんと取れました。

メモリ上のデータをディスクへ保存する

Redisは高速にデータのやりとりをできるように基本はメモリ上にデータを持っています。なので、このままだと今登録したデータはMacを落とすと消えてしまいます。

それでもいいならいいんですが、だったらmemcachedでいいじゃん、という話になるのでRedisの特長の一つである、ディスクへの保存をやってみます。

メモリ上のデータをディスクへ保存するには、bgsaveコマンドを実行します。

127.0.0.1:6379> bgsave
Background saving started

するとバックグラウンドでのデータのダンプが始まります。

(試してないですが、あくまでもstartedってなっているので、すぐにMacやredis-serverを落とすとデータ量が多い場合は完全に保存されないかも??まぁほんとに大量なデータでないと心配いらないと思いますが)

手動で起動している場合は、ターミナル上に出力されたredis-serverのログを見ると、

[33313] 11 Aug 01:09:22.261 * Background saving started by pid 33393
[33393] 11 Aug 01:09:22.262 * DB saved on disk
[33313] 11 Aug 01:09:22.270 * Background saving terminated with success
 ↓
バックグラウンド保存プロセス開始  ⇒ ディスクへの保存完了  ⇒ バックグラウンド保存プロセス成功&終了

ってなってるのがわかるかと。

では、ディスク上に保存されたファイルを確認してみます。一度redis-serverをCtrl+Cで終了します。

そしてそのままredis-serverを起動したディレクトリを調べると、dump.rdbというファイルがあるかと思います。これが保存されたダンプファイルです。

rdbってのは(たぶん)redis databaseって意味かな?リレーショナルデータベースではないよね。ややこしい。

ちなみに、先ほどの自動起動でredis-serverを起動した場合、dump.rdbは/usr/local/var/db/redis/配下にできます。

ディスクに保存されたデータをリストア

最後に、dump.rdbからちゃんとデータを復元できているかどうか確認してみます。

dump.rdbが作成されたディレクトリで、redis-serverをもう一度起動してみます。

$ redis-server
・
・
・
[33394] 11 Aug 01:10:12.812 # Server started, Redis version 2.8.9
[33394] 11 Aug 01:10:12.812 * DB loaded from disk: 0.001 seconds
[33394] 11 Aug 01:10:12.812 * The server is now ready to accept connections on port 6379

すると、先ほどよりもログが1行増えてるのがわかります。DB loaded from disk: 0.001 secondsの行ですね。

ディスクからデータを読み込んだみたいなので、クライアントを起動して先ほど保存したkey-testの値を取り出してみます。

$ redis-cli
127.0.0.1:6379> get key-test
"val-test"

お、ありました。

続けて、ディレクトリにできたdump.rdbが本当に先ほどのデータを保持しているやつなのか確かめるために、一度redis-serverを落としてdump.rdbを削除してから、再びクライアントを起動 してデータを取り出してみます。すると、

127.0.0.1:6379> get key-test
(nil)

データがなくなってる。 ということで、dump.rdbを消すとデータが復元できなくなるので注意を。