今回は、RedisのオブジェクトをRubyらしく使うことができるようになる『nateware/redis-objects』
とRedisのサーバ内でネームスペースを区切ってくれることで、複数アプリケーションで併用してもバッティングしないようになる『resque/redis-namespace』の紹介です。
🐰 Gemの導入・設定
Gemfileに以下を追加して、bundle install
を実行。
# Redis gem 'redis-objects' gem 'redis-namespace'
|
🍮 Redisの設定ファイル作成
Reidsへの初期接続のスクリプトconfig/initializers/Redis.rb
を作成して、次のコードを追記。
(ちなみにこのコードはHeroku/Redis cloud用です。自分の環境に合わせて適宜変更してください)
namespace = [Rails.application.class.parent_name, Rails.env].join ':' case Rails.env when 'production' Redis.current = Redis::Namespace.new(namespace, redis: Redis.new(host: '127.0.0.1', port: 6379)) when 'test' Redis.current = Redis::Namespace.new(namespace, redis: Redis.new(host: '127.0.0.1', port: 6379)) when 'development' Redis.current = Redis::Namespace.new(namespace, redis: Redis.new(host: '127.0.0.1', port: 6379)) end
|
😎 使い方
rails c
などでコンソールを起動するといろいろ試せます!
Counter
カウントしてくれるオブジェクトを作る場合はこちら。
@counter = Redis::Counter.new('counter_name') @counter.increment # or incr @counter.decrement # or decr @counter.increment(3) puts @counter.value
|
Simple Value
1つの値を格納する場合はこちら。
@value = Redis::Value.new('value_name') @value.value = 'a' @value.delete
|
List型のデータ
List型のデータはこんなふうに使えます。
# 基本的な使い方 @list = Redis::List.new('list_name') @list << 'a' @list << 'b' @list.include? 'c' # false @list.values # ['a','b'] @list << 'c' @list.delete('c')
# ListにHashを投入 @list = Redis::List.new('list_name', :marshal => true) @list << {:name => "Nate", :city => "San Diego"} @list << {:name => "Peter", :city => "Oceanside"} @list.each do |el| puts "#{el[:name]} lives in #{el[:city]}" end
|
🤔 ハッシュ型のデータ
ハッシュ型のデータを取り扱う場合はこちら。
@hash = Redis::HashKey.new('hash_name') @hash['a'] = 1 @hash['b'] = 2 @hash.each do |k,v| puts "#{k} = #{v}" end @hash['c'] = 3 puts @hash.all # {"a"=>"1","b"=>"2","c"=>"3"} @hash.clear
|
これ以外にもLockのしくみやSet型、Sort機能付きのSet型などもあり、幅広く応用できます!
🖥 VULTRおすすめ
「VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。
最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!