Forum: Ruby on Rails Question About Rails.cache and find method.

Ba79eb31ceaef95e9e52f5e5e4ec6d02?d=identicon&s=25 John Kopanas (Guest)
on 2008-12-05 18:57
(Received via mailing list)
The DB load on my site is getting really high so it is time for me to
cache common queries that are being called 1000s of times an hour
where the results are not changing.

So for instance on my city model I do the following:


def self.fetch(id)
  Rails.cache.fetch("city_#{id}") { City.find(id) }
end

def after_save; Rails.cache.delete("city_#{self.id}"); end;
def after_destroy; Rails.cache.delete("city_#{self.id}"); end;


So now when I can City.find(1) the first time I hit the DB but the
next 1000 times I get the result from memory.  Great.  But most of the
calls to city are not City.find(1) but @user.city.name where Rails
does not use the fetch but queries the DB again... which makes sense
but not exactly what I want it to do.

I can do City.find(@user.city_id) but that is ugly.

So my question to you guys.  What are the smart people doing?  What is
the right way to do this?

I look forward to getting feedback! :-)

--
John Kopanas
john@kopanas.com

Blog: http://www.kopanas.com
Conference: http://www.cusec.net
Twits: http://www.twitter.com/kopanas
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-06 15:03
(Received via mailing list)
On 5 Dec 2008, at 17:57, John Kopanas wrote:

> end
>
> I can do City.find(@user.city_id) but that is ugly.
>
> So my question to you guys.  What are the smart people doing?  What is
> the right way to do this?
>
Live dangerously and override find? :-)

Fred
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.