dimanche 27 septembre 2015

Rails fragment caching - please help me understand

I have just started using caching in a production application to speed things up. I've read the primary Rails guide, various blogs, the source itself, etc. But my head is still not clear on one simple thing when it comes to fragment caching:

When you destroy the cache after updating the object, are you only updating the single object, or the class? I think just the single object.

Here's an example:

<% @jobs.each do |job| %>
   <% cache("jobs_index_table_environment_#{session[:merchant_id]}_job_#{job}") do %>
    stuff
   <% end %>
<% end %>

I use the code above in my jobs index page. Each row is rendered with some information the user wants, some CSS, clickable to view the individual job, etc.

I wrote this in my Job class (model)

after_save do
    Rails.cache.delete("jobs_index_table_environment_#{merchant_id}_job_#{self}")
  end

  after_destroy do
    Rails.cache.delete("jobs_index_table_environment_#{merchant_id}_job_#{self}")
   end

I want the individual job objects destroyed from the cache if they are updated or destroyed, and of course newly created jobs get their own cache key the first time they pop on the page.

I don't do the Russian doll thing with @jobs because this is my "god" object and is changing all the time. The cache would almost never be helpful as the collection probably morphs by the minute.

Is my understanding correct that in the above view, if I rendered, say, 25 jobs to the first page, I would get 25 objects in my cache with the cache key, and then if I only change the first, it's cached value would be destroyed and the next time the jobs page loads, it would be re-cached while the other 24 would just be pulled from the cache?

Aucun commentaire:

Enregistrer un commentaire