Ruby on Railsのセッション管理にRedisを使ってみた
概要
Redisとは
メモリ上にKey-Valueストア(KVS)を構築することができるソフトウェアの一つ。
KVSは任意の保存したいデータ(値:value)に対し、対応する一意の標識(キー:key)を設定し、これらをペアで保存するデータベースの一種で、Redisはコンピュータのメインメモリ上にKVSを構築し、外部のプログラムからデータの保存と読み出しができる。
Redisとは - IT用語辞典より抜粋
なぜRedisを使用するのか?
- ruby on rails - セッションを保存するとき、なぜ、Cookieではなくmemcachedやredisを使用するのでしょうか? - スタック・オーバーフロー
- Ruby on Rails - redisやmemcashedといったセッションストアの使用シーンがわかりません。(RDBではダメなんでしょうか?)(11303)|teratail
Redisのイントール
Homebrewを使用しRedisをイントールします。
$ brew install redis
Redisクライアントの基本操作
Redisサーバーの起動(Ctrl+C
で終了)
$ redis-server /usr/local/etc/redis.conf
Redisクライアントの起動
$ redis-cli
# DB選択(初期は0, 0〜15まで選択可能)
127.0.0.1:6379> select 1
OK
# keyとvalueをセット
127.0.0.1:6379[1]> set key val
OK
# 指定したkeyのvalueを閲覧
127.0.0.1:6379[1]> get key
"val"
# 保存されているkeyを閲覧
127.0.0.1:6379[1]> keys *
1) "key"
# 保存されているkeyの数
127.0.0.1:6379[1]> dbsize
(integer) 1
# 削除
127.0.0.1:6379[1]> flushdb
OK
# Redisクライアントの終了
127.0.0.1:6379[1]> exit
Railsアプリの準備
環境
ruby 2.3.3
Rails 4.2.7.1
Railsアプリを任意の場所に作成。
$ cd Desktop
$ mkdir redis
$ cd redis
$ rails new redistest
RailsアプリにRedisを導入
1.下記をGemfileに追記し$ bundle install
を実行。
gem 'redis'
gem 'redis-rails'
2.初期設定をコメントアウトする。
1 # Be sure to restart your server when you modify this file.
2 # ↓この行をコメントアウト
3 # Rails.application.config.session_store :cookie_store, key: '_redistest_session'
3.development.rbに下記を追記。
Rails.application.configure do
# (中略)
# ↓この行を追加(6379/0の0はDBのID、expire_inはセッションの生存期間、ここでは1分に設定している)
config.session_store :redis_store, servers: 'redis://localhost:6379/0', expire_in: 1.minutes
end
Redisにセッションを保存する
1.テスト用のコントローラーを作成。(redistest直下で)
$ rails g controller redis
2.1で作成したコントローラーに下記を記述。
class RedisController < ApplicationController
require 'redis'
def test
render text: 'テスト'
Redis.current.set("hoge", "fuga")
session[:user_email] = '[email protected]'
end
end
3.ルーティング設定
Rails.application.routes.draw do
# (中略)
# ↓この行を追加
match ':controller(/:action(/:id))', via: [ :get, :post, :patch ]
end
4.Redis接続情報を作成
require 'redis'
Redis.current = Redis.new(:host => '127.0.0.1', :port => 6379)
5.Rails・Redisサーバー・Redisクライント・RailsConsoleの起動(既に起動している際は再起動)
Railsサーバーの起動
$ rails s
RailsConsoleの起動
$ rails console
Redisサーバーの起動
$ redis-server /usr/local/etc/redis.conf
Redisクライアントの起動
$ redis-cli
6.1.2で作成したコントローラーの実行
RailsConsoleで下記のコマンドを実行
irb(main):001:0> app.get "http://localhost:3000/redis/test"
7.Redisクライアントで保存されたセッションの確認
127.0.0.1:6379> keys *
1) "XXXXXXXXXXXXXXXXXXX" ←セッション(上記で生存期間を1分にしているため1分経過後消える)
2) "hoge"
参考
Author And Source
この問題について(Ruby on Railsのセッション管理にRedisを使ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/takanori_yamashita/items/5d666e943a3368848da9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .