kentana20 技忘録

技術ネタを中心に、セミナー、勉強会、書籍、会社での出来事を綴っていきます。不定期更新。

OS XでRedisをインストールしてRuby on Railsで使う(gem 'redis')

連休中にRuby on Railsを使ってWebアプリを作っていて、Redisにデータ登録するとこまでやったので備忘録のために書いておきます。

Redisは高速で動作するインメモリ型のKVSでありながら、非同期でディスクに書き込みを行い、データを永続化してくれるありがたい代物です。

公式サイトは英語ですが、こちらにドキュメントの日本語訳があります。

f:id:kentana20:20140506174657p:plain

日本語ドキュメントがあるので、Redisについての詳細な説明は省きますが、以下のような特徴があります。

Redisの特徴

  • インメモリ型
    • インメモリ型で動作するため、非常に高速
  • データ永続化
    • 非同期でディスクへ書き込むため、データを永続化できる
  • データ構造
    • リスト型、セット型、ハッシュ型といった多彩なデータ構造をサポートしている
  • 豊富な言語サポート(ライブラリ)
    • Ruby, Python, Scala, PHP, Javaなど、様々な言語でライブラリが提供されているため、利用がカンタン
  • レプリケーション

MacOS XRuby 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上で公開しようと思っていますので、今後をお楽しみに〜!