酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

Redis-objects/redis-namespace Redisを便利に使うためのGem紹介!

今回は、RedisのオブジェクトをRubyらしく使うことができるようになる『nateware/redis-objects』 とRedisのサーバ内でネームスペースを区切ってくれることで、複数アプリで併用してもバッティングしないようになる『resque/redis-namespace』の紹介です。


Gemの導入・設定

Gemfileに以下を追加して、bundle installを実行。

1
2
3
# Redis
gem 'redis-objects'
gem 'redis-namespace'

Redisの設定ファイル作成

Reidsへの初期接続のスクリプトconfig/initializers/redis.rbを作成して、以下のコードを追記。
(ちなみにこのコードはheroku/redis cloud用です。自分の環境に合わせて適宜変更してください)

1
2
3
4
5
6
7
8
9
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

カウントしてくれるオブジェクトを作る場合はこちら。

1
2
3
4
5
@counter = Redis::Counter.new('counter_name')
@counter.increment  # or incr
@counter.decrement  # or decr
@counter.increment(3)
puts @counter.value

Simple Value

1つの値を格納する場合はこちら。

1
2
3
@value = Redis::Value.new('value_name')
@value.value = 'a'
@value.delete

List型のデータ

List型のデータはこんなふうに使えるようになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 基本的な使い方
@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型のデータ

Hash型のデータを取り扱う場合はこちら。

1
2
3
4
5
6
7
8
9
@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型などもあり、幅広く応用することができます!

おすすめの書籍