/redis-store

Namespaced Rack::Session, Rack::Cache, I18n and cache Redis stores for Ruby web frameworks

Primary LanguageRubyMIT LicenseMIT

Namespaced Rack::Session, Rack::Cache, I18n and cache Redis stores for Ruby web frameworks

Installation

Redis, Option 1: Homebrew

MacOS X users should use Homebrew to install Redis:

brew install redis

Redis, Option 2: From Source

Download and install Redis from http://code.google.com/p/redis/

wget http://redis.googlecode.com/files/redis-2.0.0.tar.gz
tar -zxf redis-2.0.0.tar.gz
mv redis-2.0.0 redis
cd redis
make

Install the Gem

Assuming you're using RVM or on Windows, install the gem with:

gem install redis-store

Options

You can specify the Redis configuration details using a URI or a hash. By default the gem will attempt to connect to localhost port 6379 and the db 0.

Set by URI

For example

"redis://:secret@192.168.1.100:23682/13/theplaylist"

Made up of the following:

host: 192.168.1.100
port: 23682
db: 13
namespace: theplaylist
password: secret

If you want to specify the namespace option, you have to pass the db param too.

Important: for now (rc1) namespace is only supported for single, non-distributed stores.

Set by Hash

{ :host => 192.168.1.100, :port => 23682, :db => 13, :namespace => "theplaylist", :password => "secret" }

Important: for now (rc1) namespace is only supported for single, non-distributed stores.

Cache store

Provides a cache store for your Ruby web framework of choice.

Rails 2.x

config.gem "redis-store"
config.cache_store = :redis_store

Rails 2.x (with Bundler)

# Gemfile
gem "redis-store"

# in your configuration
config.gem "redis-store"
config.cache_store = :redis_store, { ... optional configuration ... }

Rails 3.x

# Gemfile
gem 'redis'
gem 'redis-store', '1.0.0.rc1'

# config/environments/production.rb
config.cache_store = :redis_store, { ... optional configuration ... }

For advanced configurations scenarios please visit the wiki.

Merb

dependency "redis-store", "1.0.0.rc1"
dependency("merb-cache", merb_gems_version) do
  Merb::Cache.setup do
    register(:redis, Merb::Cache::RedisStore, :servers => ["127.0.0.1:6379"])
  end
end

Sinatra

require "sinatra"
require "redis-store"
class MyApp < Sinatra::Base
  register Sinatra::Cache
  get "/hi" do
    settings.cache.fetch("greet") { "Hello, World!" }
  end
end

Keep in mind that the above fetch will return "OK" on success, not the return of the block.

For advanced configurations scenarios please visit the wiki.

Rack::Session

Provides a Redis store for Rack::Session. See http://rack.rubyforge.org/doc/Rack/Session.html

Rack application

require "rack"
require "redis-store"
require "application"
use Rack::Session::Redis
run Application.new

Rails 2.x

# config/environment.rb
config.gem "redis-store"

# then configure as following:

# config/environments/*.rb
config.cache_store = :redis_store

# or

# config/initializers/session_store.rb
ActionController::Base.session = {
  :key         => APPLICATION['session_key'],
  :secret      => APPLICATION['session_secret'],
  :key_prefix  => Rails.env
}

ActionController::Base.session_store = :redis_session_store

Rails 2.x (with Bundler)

# Gemfile
gem "redis-store"

# then configure as following:

# config/environments/*.rb
config.cache_store = :redis_store

# or

# config/initializers/session_store.rb
ActionController::Base.session = {
  :key         => APPLICATION['session_key'],
  :secret      => APPLICATION['session_secret'],
  :key_prefix  => Rails.env
}

ActionController::Base.session_store = :redis_session_store

Rails 3.x

# Gemfile
gem 'rails', '3.0.3'
gem 'redis'
gem 'redis-store', '1.0.0.rc1'

# config/initializers/session_store.rb
MyApp::Application.config.session_store :redis_session_store

For advanced configurations scenarios please visit the wiki.

Merb

dependency "redis-store", "1.0.0.rc1"
Merb::Config.use do |c|
  c[:session_store] = "redis"
end
Merb::BootLoader.before_app_loads do
  Merb::SessionContainer.subclasses << "Merb::RedisSession"
end

Sinatra

require "sinatra"
require "redis-store"

class MyApp < Sinatra::Base
  use Rack::Session::Redis, :redis_server => 'redis://127.0.0.1:6379/0' # Redis server on localhost port 6379, database 0

  get "/" do
    session[:visited_at] = DateTime.now.to_s # This is stored in Redis
    "Hello, visitor."
  end
end

For advanced configurations scenarios please visit the wiki.

Rack::Cache

Provides a Redis store for HTTP caching. See http://github.com/rtomayko/rack-cache

require "rack"
require "rack/cache"
require "redis-store"
require "application"
use Rack::Cache,
  :metastore   => 'redis://localhost:6379/0/metastore',
  :entitystore => 'redis://localhost:6380/0/entitystore'
run Application.new

I18n

require "i18n"
require "redis-store"
I18n.backend = I18n::Backend::Redis.new

The backend accepts the uri string and hash options.

Unicorn

Use Rails.cache.reconnect in your Unicorn hooks, in order to force the client reconnection.

Running specs

gem install jeweler bundler
git clone git://github.com/jodosha/redis-store.git
cd redis-store
bundle install
REDIS_STORE_ENV=rails3 bundle install # to install Rails 3 gems
rake dtach:install
rake redis:install
rake
REDIS_STORE_ENV=rails3 rake # to test against Rails 3

If you are on Snow Leopard you have to run env ARCHFLAGS="-arch x86_64" bundle install

Copyright

(c) 2009 - 2010 Luca Guidi - http://lucaguidi.com, released under the MIT license