LoginSignup
73
62

More than 5 years have passed since last update.

Ruby on Railsのセッション管理にRedisを使ってみた

Posted at

概要

Redisとは

メモリ上にKey-Valueストア(KVS)を構築することができるソフトウェアの一つ。
KVSは任意の保存したいデータ(値:value)に対し、対応する一意の標識(キー:key)を設定し、これらをペアで保存するデータベースの一種で、Redisはコンピュータのメインメモリ上にKVSを構築し、外部のプログラムからデータの保存と読み出しができる。

Redisとは - IT用語辞典より抜粋

なぜRedisを使用するのか?

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.初期設定をコメントアウトする。

config/initializers/session_store.rb
  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に下記を追記。

config/environments/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で作成したコントローラーに下記を記述。

app/controllers/redis_controller.rb
class RedisController < ApplicationController
  require 'redis'

  def test
    render text: 'テスト'
    Redis.current.set("hoge", "fuga")
    session[:user_email] = 'test@a.a'
  end
end

3.ルーティング設定

Desktop/redis/redistest/config/routes.rb
Rails.application.routes.draw do
# (中略)
# ↓この行を追加
match ':controller(/:action(/:id))', via: [ :get, :post, :patch ]
end

4.Redis接続情報を作成

Desktop/redis/redistest/config/inisitalizers/redis.rb
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"

参考

73
62
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
73
62