[Sy] Mac OS X(Mavericks)にRedisをインストール+動作確認
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/LaunchAgents
にhomebrew.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を消すとデータが復元できなくなるので注意を。