概要
今回は、永続化可能なKVSとしてよく使わているredisについて説明します。
redisは単純にkey-valueの関係でデータを保存することができ、session管理や、その他様々なシーンで使われています。
活用例としてはニコニコ生放送に見る Redis 活用ノウハウなど目を通しておくとイメージしやすいかと思います。
今回はredisのインストール、基本操作、そして実際にrailsのsession storeとして使用されるまでを書いていきます。
redisのインストール
Mac
macでredisをインストールするためにはbrewを使用します。
~ brew install redis
起動および接続は以下のコマンドにて。
~ redis-server /usr/local/etc/redis.conf
~ redis-cli
Cent
centの場合はyumを使用してインストールを行います。
~ sudo yum --enablerepo=epel install redis
起動および接続は以下のコマンドにて。
~ sudo /etc/init.d/redis start
~ redis-cli
redisの基本操作
以下redisの基本操作となります。
# DBの選択(何番目のDBなのか。0 ~ 15まであります)
> select 0
# 保存されているキー数
> dbsize
# value閲覧
> get key_here
# 削除
> flushdb
# 終了
> exit
redis.confの設定
実際に細かい設定について見ていきます。redis.confのパスはそれぞれ以下の通り。
# Mac
/usr/local/etc/redis.conf
# Cent
/etc/redis.conf
以下最低限見ておけば良い項目です(あくまで開発用で)。
# サービスとして起動したい場合はデーモンをyesにする
daemonize no
# デーモン化した場合のpidのパス指定
pidfile /usr/local/var/run/redis.pid
# redisが動くport指定
port 6379
# 接続元の制限(Master, Slave構成にする際に制御したりなど。0.0.0.0を設定するとすべてのサーバーからアクセス可能になります)
bind 127.0.0.0
# timeout時間の設定
timeout
# redisのログレベル設定(項目についてはredis.conf内のコメント参照)
loglevel verbose
# ログファイルの場所
logfile /usr/local/var/log/redis.log
# スナップショットの保存条件(以下は10分に1度でも変更があったら保存)
save 600 1
# dbファイルの圧縮
rdbcompression yes
master, slave構成
通常のDBでもよくやるmaster, slaveの構成もredisは簡単に構築することができます。
bindの設定
slaveとなるredisからmasterへの接続ができるように、masterのredis.confのbindの設定を行います。
# 接続を許可するipを記載
bind xxx.xxx.xxx.xxx
その後redisの再起動を行い、以下のコマンドでmasterのredisにアクセスできるかを確認します。
~ redis-cli -h <master redis ip>
※アクセスできない場合は、iptables等の設定にも原因があるかと思いますので、そちらも確認してみてください。
slave設定
slaveとなるredisのredis.confにslaveofという項目があるので、こちらの設定を行います。
slaveof <master ip> <master port>
再び再起動を行い、きちんと反映されているかを以下のコマンドで確認します。
~ redis-cli
> INFO
・
・
# Replication
role:slave
・
・
Railsでsession storeに使用する
ここまででredisの基本的なことに触れてきました。最後に実際にrailsのsession storeとして使用する例を書いていきます。
環境
- ruby 2.2.0
- ruby on rail 4.2.3
gemの導入
railsでredisを使う際にはredis-railsがよく使われます。今回もこちらを使用します。
Gemfileにredis-railsを記載し、bundle installをします。
gem 'redis-rails'
~ bundle install --path vendor/bundle
sessionの保存設定
railsはデフォルトでconfig/initializers/session_store.rbにセッションの設定が書いてあります。
まずこのデフォルトの設定をコメントアウトします。
~ vim config/initializers/session_store.rb
# Rails.application.config.session_store :cookie_store, key: '_app_session'
続いて各環境ごとに新たに設定を書き加えていきます(今回はdevelopment環境を例とします)。
~ vim config/environments/develpoment.rb
Rails.application.configure do
・
・
・
config.session_store :redis_store, {
servers: {
host: 'localhost',
port: 6379,
db: 0,
namespace: 'sessions'
},
expire_after: 60.minutes
}
end
これでサーバーを再起動し、sessionを生成するとredisの方に保存されているかと思います。