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

今回は、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型などもあり、幅広く応用できます!

📚 おすすめの書籍