Redisとは?RailsにRedisを導入
はじめに
自分の管理するサービスでもRedisを使ってはいるが、splitというgemを使うのに必要で入れているだけで、
せっかくRedisを入れていてもほぼ役目を果たしていないのでRedisをちゃんと使う前に改めてRedisについて整理したいなーと思ってメモがてら書いてます。
Redisとは?
- キャッシュシステムとして有名であり、NoSQLの1つ
- NoSQLの中でも、KVS(キーバリューストア)。キーとバリューの組み合わせを保存する。
- データ型にいろいろ使える
- String,List,Set,Sorted Set,Hash
- インメモリなので高速
- 永続化設定可能
- シングルスレッド
- スケールアウト可能
- 使いどころ
- セッションなど有効期限のあるデータを扱う場合
- ランキングデータなど重たいSQLを走らせないといけない処理を扱う場合
Redis のインストール
- String,List,Set,Sorted Set,Hash
- セッションなど有効期限のあるデータを扱う場合
- ランキングデータなど重たいSQLを走らせないといけない処理を扱う場合
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.cache_store = :redis_store, 'redis://localhost:6379/0/cache', { expires_in: 90.minutes }
config/application.rb に書いていますが、実際は環境毎に参照する Redis サーバーは違うと思うので、config/enviroments/◯◯.rb
に書くとよいかと
サンプルページの作成
Redis.current = Redis.new
ローカル環境なので Redis.new
しか書いていませんが、下記のように host
と port
を指定できるので、AWSのElastiCacheのRedisなどを使う場合はそれぞれを指定する必要がある。(ローカル含めて環境変数で管理するのがおすすめ)
Redis.new(:host => '127.0.0.1', :port => 6379)
つづいてページを表示するために、ルーティング、コントローラ、ビューを書いていきます。
resource :redis, only: %i[show]
class RedisController < ApplicationController
def show
Redis.current.set('mykey', 'Hello')
end
end
config/initializers/redis.rb
で定義した Redis.current
に対して値を保存します。
<%= Redis.current.get('mykey') %>
で、上で保存した値をビューの中で取り出して表示します。
まとめ
実装自体はたったこれだけです。
ランキングページなど、重たいSQL必要なところとか、フラグメントキャッシュとかで使っていきたいなと思いました。
あとはAWSの場合はElastiCacheでRedisサーバーを立てて、そのエンドポイントを config/initializers/redis.rb
で指定すればよいかと思います!(自分はセキュリティグループの設定忘れてて詰まったので気にしてみてくださいw)
Author And Source
この問題について(Redisとは?RailsにRedisを導入), 我々は、より多くの情報をここで見つけました https://qiita.com/hirotakasasaki/items/9819a4e6e1f33f99213c著者帰属:元の著者の情報は、元の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 .