Latest commit 3bd2792 Oct 24, 2017
tubbo Merge pull request #77 from masatooba/fix-use-expire_after-in-readme
Use expire_after instead of expires_in for session_store in README

Redis stores for Ruby on Rails

redis-rails provides a full set of stores (Cache, Session, HTTP Cache) for Ruby on Rails. See the main redis-store readme for general guidelines.


Add the following to your Gemfile:

gem 'redis-rails'


# config/application.rb
config.cache_store = :redis_store, "redis://localhost:6379/0/cache", { expires_in: 90.minutes }

(NOTE: The :expires_in option can also be written as :expire_in and :expire_after)

To be fault tolerant when redis is not available you can set option raise_errors to false since redis-activesupport v4.1.4.

Configuration values at the end are optional. If you want to use Redis as a backend for sessions, you will also need to set:

# config/initializers/session_store.rb
MyApplication::Application.config.session_store :redis_store, servers: ["redis://localhost:6379/0/session"]

You can also provide a hash instead of a URL

config.cache_store = :redis_store, {
  host: "localhost",
  port: 6379,
  db: 0,
  password: "mysecret",
  namespace: "cache"

And similarly for the session store:

MyApplication::Application.config.session_store :redis_store, {
  servers: [
      host: "localhost",
      port: 6379,
      db: 0,
      password: "mysecret",
      namespace: "session"
  expire_after: 90.minutes,
  key: "_#{Rails.application.class.parent_name.downcase}_session"

And if you would like to use Redis as a rack-cache backend for HTTP caching, add redis-rack-cache to your Gemfile and add:

# config/environments/production.rb
config.action_dispatch.rack_cache = {
  metastore: "redis://localhost:6379/1/metastore",
  entitystore: "redis://localhost:6379/1/entitystore"

Usage with Redis Sentinel

sentinel_config = {
  url: "redis://mymaster/0",
  role: "master",
  sentinels: [{
    host: "",
    port: 26379
    host: "",
    port: 26380
    host: "",
    port: 26381

# configure cache, merging opts with sentinel conf
config.cache_store = :redis_store, sentinel_config.merge(
  namespace: "cache",
  expires_in: 1.days

# configure sessions, setting the sentinel config as the
# servers value, merging opts with the sentinel conf.
config.session_store :redis_store, {
  servers: [
      namespace: "sessions"
  expire_after: 2.days

Running tests

gem install bundler
git clone git://
cd redis-rails
RAILS_VERSION=5.0.1 bundle install
RAILS_VERSION=5.0.1 bundle exec rake

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


Gem Version Build Status Code Climate


2009 - 2011 Luca Guidi -, released under the MIT license