I’m very impressed with the caching capabilities in Rails 3. Not only can it cache pages like any good Rack application can, it can also cache actions - which will include factors like authentication of sessions, and it can also cache… partials!

Seriously, isn’t that awesome?

There are some other great aspects, too:

  • When memcached is employed, time-to-live can be specified.
  • Sweepers can be used to purge caches.
  • Callbacks can be used to purge caches.

In my experience, caching can be a pain because it can happen when it shouldn’t. However, it has also been my experience that it is the most effective way to improve performance.

Example of Rails 3 Caching

  1 class AccountsController < InheritedResources::Base
  2   defaults :resource_class => Account, :collection_name => 'accounts', :instance_name => 'account'
  3
  4   before_filter :clear_accounts_cache, :only => [:create, :update, :hide]
  5   caches_action :index
  6

...

 39   private
 40     def clear_accounts_cache
 41       expire_action :action => :index
 42     end
 43 end