LoginSignup
98
84

More than 5 years have passed since last update.

Redisとは?RailsにRedisを導入

Last updated at Posted at 2019-03-03

はじめに

自分の管理するサービスでもRedisを使ってはいるが、splitというgemを使うのに必要で入れているだけで、
せっかくRedisを入れていてもほぼ役目を果たしていないのでRedisをちゃんと使う前に改めてRedisについて整理したいなーと思ってメモがてら書いてます。

Redisとは?

  • キャッシュシステムとして有名であり、NoSQLの1つ
  • NoSQLの中でも、KVS(キーバリューストア)。キーとバリューの組み合わせを保存する。
  • データ型にいろいろ使える
    • String,List,Set,Sorted Set,Hash
  • インメモリなので高速
  • 永続化設定可能
  • シングルスレッド
  • スケールアウト可能
  • 使いどころ
    • セッションなど有効期限のあるデータを扱う場合
    • ランキングデータなど重たいSQLを走らせないといけない処理を扱う場合

Redis のインストール

brew を使ってインストールしました。
他のインストール方法はこちら(https://qiita.com/KurosawaTsuyoshi/items/f8719bf7c3a10d22a921)

$ brew install redis

これでインストール完了。

Redis サーバーの起動

つづいて Redis のサーバーを起動させます。

$ redis-server

これでローカル環境で Redis を使えるようになります。

Redis に接続する

$ redis-cli
127.0.0.1:6379>

Redis を使ってみる

redis-cli で Redisサーバーに接続したあとに下記のように操作してみます。

  • SET を使って Key と Value を設定しデータを保存する
  • GET で Key を指定して Value を取得する
  • quit で redis-cli を終了
redis> SET mykey "Hello"
OK
redis> GET mykey
"Hello"
redis> quit

(https://redis.io/commands/set)

RailsにRedisを導入

環境

ruby 2.5.1
Rails 5.2.2

Rails アプリの作成

ここではとあるページにRedisから値を取り出して表示するだけの簡単なアプリケーションを作ります。

$ rails new redis_sample

gem redis-rails のインストール

Rails で Redis を使うので Gemfile を以下のようにします。普通の Ruby で使う場合は gem redis でよさげ。

gem 'redis-rails'
$ bundle install
config/application.rb
config.cache_store = :redis_store, 'redis://localhost:6379/0/cache', { expires_in: 90.minutes }

config/application.rb に書いていますが、実際は環境毎に参照する Redis サーバーは違うと思うので、config/enviroments/◯◯.rb に書くとよいかと

サンプルページの作成

config/initializers/redis.rb
Redis.current = Redis.new

ローカル環境なので Redis.new しか書いていませんが、下記のように hostport を指定できるので、AWSのElastiCacheのRedisなどを使う場合はそれぞれを指定する必要がある。(ローカル含めて環境変数で管理するのがおすすめ)

Redis.new(:host => '127.0.0.1', :port => 6379)

つづいてページを表示するために、ルーティング、コントローラ、ビューを書いていきます。

resource :redis, only: %i[show]
app/controllers/redis_controller.rb
class RedisController < ApplicationController
  def show
    Redis.current.set('mykey', 'Hello')
  end
end

config/initializers/redis.rb で定義した Redis.current に対して値を保存します。

app/views/redis/show.html.erb
<%= Redis.current.get('mykey') %>

で、上で保存した値をビューの中で取り出して表示します。

まとめ

実装自体はたったこれだけです。
ランキングページなど、重たいSQL必要なところとか、フラグメントキャッシュとかで使っていきたいなと思いました。
あとはAWSの場合はElastiCacheでRedisサーバーを立てて、そのエンドポイントを config/initializers/redis.rb で指定すればよいかと思います!(自分はセキュリティグループの設定忘れてて詰まったので気にしてみてくださいw)

98
84
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
98
84