OS XでRedisをインストールしてRuby on Railsで使う(gem 'redis')
連休中にRuby on Railsを使ってWebアプリを作っていて、Redisにデータ登録するとこまでやったので備忘録のために書いておきます。
Redisは高速で動作するインメモリ型のKVSでありながら、非同期でディスクに書き込みを行い、データを永続化してくれるありがたい代物です。
公式サイトは英語ですが、こちらにドキュメントの日本語訳があります。
日本語ドキュメントがあるので、Redisについての詳細な説明は省きますが、以下のような特徴があります。
Redisの特徴
- インメモリ型
- インメモリ型で動作するため、非常に高速
- データ永続化
- 非同期でディスクへ書き込むため、データを永続化できる
- データ構造
- リスト型、セット型、ハッシュ型といった多彩なデータ構造をサポートしている
- 豊富な言語サポート(ライブラリ)
- レプリケーション
- master/slaveレプリケーションが設定ファイル1つで非常に容易に設定できる
MacOS X で Ruby on Rails + Redisなアプリを動かす
Redisのインストール
まずはHomebrewでRedisをインストールします。
brew install redis
インストールが完了したら、redis-serverコマンドでバージョンを確認します。
redis-server --version
redis.conf編集
インストールが終了したら、/usr/local/etc/redis.conf を編集します。これは、デフォルトの状態だと /usr/local/var/ 直下にdbファイルなどが作られてしまうための対応です。
/usr/local/var/ を /usr/local/var/redis/ に変更
Redisを起動し、redis-cliで動作確認
confファイルを変更したら、Redisを起動し、redis-cliというコマンドラインで使えるRedisのクライアントルールを起動し、動作確認を行います。
redis-server /usr/local/etc/redis.conf
"set $key $value"でデータ登録、"get $key"でデータ取得ができます。カンタンですね〜。
redis-cli 127.0.0.1:6379> set key val 127.0.0.1:6379> get key ' valが返却
Gemのインストール
redis-cliでの動作確認が完了したら、'redis'というgemをインストールして、RailsアプリケーションのGemfileに'redis'を追加します。
- gem 'redis' のインストール
gem install 'redis'
- Gemfile
gem 'redis'
Redis接続情報を作成
/config/inisitalizers/redis.rb を作成し、Redisの接続情報を設定します。
require 'redis' Redis.current = Redis.new(:host => '127.0.0.1', :port => 6379)
Redisへのデータ登録
Redisでキャッシュしたいデータについて、登録処理を記述します。(ここでは、コントローラに書いています)
class TestController < ApplicationController require 'redis' def test Redis.current.set("hoge", "fuga") end end
登録したデータをredis-cliで確認
redis-cli 127.0.0.1:6379> get "hoge" ' "fuga"が返却
ホントはlib/配下にクラスかモジュールを作って動かすか、app/model/配下にモデルクラスを作ってActiveRecordと連携して使うのが実用的っぽいんですが、今回はRedisを素のままでつかってみたかったので、こういうカタチにしました。
所感
Redisに対する知識は殆どゼロの状態でスタートして、半日程度でWebアプリに組み込むことができたので、学習コストはそれほど高くないという印象です。
ただし、実運用を行う場合は
といった面で、しっかり設計しなければいけないと感じました。 とは言え、キャッシュサーバとして利用するには良いKVSなのでは、と思います。
このアプリのソースはGitHubに上げてあるので、「使い方が違うんじゃ、、」とか「こういう利用方法もある」とか、ご指摘・コメントをいただけたら、とても嬉しいです。
そのうち、EC2上で公開しようと思っていますので、今後をお楽しみに〜!