LoginSignup
55
53

More than 5 years have passed since last update.

railsでsessionをredisに保存する

Last updated at Posted at 2015-12-06

概要

今回は、永続化可能な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の方に保存されているかと思います。

参考

55
53
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
53