Simple Cacheable Build Status

Simple Cacheable is a simple cache implementation based on activerecord, it is extracted from rails-bestpractices.com.

it supports activerecord >= 3.0.0, tested on 2.0.0 and works with jruby.

Introduction

Here is a blog post to introduce simple_cacheable gem, http://rails-bestpractices.com/blog/posts/24-simple_cacheable

Usage

class User < ActiveRecord::Base
  include Cacheable

  has_many :posts
  has_one :account

  model_cache do
    with_key                          # User.find_cached(1)
    with_attribute :login             # User.find_cached_by_login('flyerhzm')
    with_method :last_post            # user.cached_last_post
    with_association :posts, :account # user.cached_posts, user.cached_account
  end

  def last_post
    posts.last
  end
end

class Account < ActiveRecord::Base
  belongs_to :user
end

class Post < ActiveRecord::Base
  include Cacheable

  belongs_to :user
  has_many :comments, :as => :commentable

  model_cache do
    with_key                                # post.find_cached(1)
    with_class_method  :default_post        # Post.default_post
    with_association   :user, :comments     # post.cached_user, post.cached_comments
  end

  def self.default_post
    Post.first
  end
end

class Comment < ActiveRecord::Base
  include Cacheable

  belongs_to :commentable, :polymorphic => true

  model_cache do
    with_association :commentable  # comment.cached_commentable
  end
end

Advanced Usage

  # Utilize Simple Cacheable to cache ActiveRecord objects without marshalling errors
  Cacheable.fetch "collection_of_twelve_users", expires_in: 1.day do
    User.limit(12)
  end

Install

add the following code to your Gemfile

gem "simple_cacheable"

Gotchas

Caching, and caching invalidation specifically, can be hard and confusing. Simple Cacheable methods should expire correctly in most cases. Be careful using with_method and with_class_method, they should specifically not be used to return collections. This is demonstrated well in Tobias Lutke's presentation: Rockstar Memcaching.

Copyright © 2011 Richard Huang ([email protected]), released under the MIT license