【Rails+Redis】セッション管理をredisに任せる


現在作成してるrailsポートフォリオで、せっかくだからセッション管理はredisに任せようと思い、色々いじったので共有したいと思います。

環境

  • macOS
  • Docker
  • RubyonRails
  • Redis
  • MySQL

前提

  • Redisはすでにインストール済み
  • DockerにもRedisは追加済み

セッション管理をRedisに任せる理由

RedisはRDBとは違って、

  • KVS
  • データをメモリに保つので動作が高速

という特徴があります。

この特徴からセッション管理に向いてるとして結構使われることが多いみたいです。

さっそく実装してみる

ではさっそく実装しましょう。

gemの追加

Gemfileに以下を追加してインストールしてください。

# Use Redis adapter to run Action Cable in production
gem 'redis', '~> 4.0'
gem 'redis-rails'

config/initializers/session_store.rbの設定

初期設定はコメントアウトしておきましょう。
最初からない人は問題ないです。

config/initializers/session_store.rb
#Rails.application.config.session_store :cookie_store, key: 'XXXXXX'

config/environments/development.rbの設定

config/environments/development.rbに以下を追加。

config/environments/development.rb
config.session_store :redis_store, servers: 'redis://redis:6379/0', expire_in: 1.day

これで一日セッションが保たれる設定になってるはずです。

確認

以下のコマンドでデータが入ってるか確認しましょう。

docker exec -it コンテナID redis-cli
127.0.0.1:6379> keys *
1) "2::63c3d325054ad936b6408b30ba8c4e1395cce110d77c3e5171c7e22840d75a9d"
2) "2::383c6dfd3c95d07631fc8e879911fef09760a789461d8b7d0736a32d7d8ee656"

keys * で出てきたkeyを使って中身を確認。

127.0.0.1:6379> get "2::63c3d325054ad936b6408b30ba8c4e1395cce110d77c3e5171c7e22840d75a9
d"

何か長い謎の文字列が出てきたら情報がしっかり入ってることになっていると思います。

試しにredisのデータを全部削除したら、アプリがログイン画面に戻りましたので、成功と見て問題ないでしょう。

まとめ

以前Redisを利用した時はランキング機能の実装だったので、また違った角度でRedisを扱えたことは勉強になりました。

ぶっちゃけ、まだRedisの知識がちゃんと身に付いてるとは言い難いですが、これからも色々利用しながら学んでいきたいと思います。

ではでは。