【发布时间】:2010-09-25 13:50:02
【问题描述】:
我网站上的数据库负载变得非常高,所以我该缓存那些每小时被调用 1000 次且结果没有变化的常见查询。 因此,例如在我的城市模型上,我执行以下操作:
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
所以现在当我第一次访问数据库时可以 City.find(1) 但接下来的 1000 次我从内存中得到结果。伟大的。但是大多数对 city 的调用不是 City.find(1) 而是 @user.city.name,其中 Rails 不使用 fetch 而是再次查询 DB ......这是有道理的,但不完全是我想要的。
我可以做 City.find(@user.city_id) 但这很难看。
所以我想问你们。聪明人在做什么?什么是 这样做的正确方法?
【问题讨论】:
标签: ruby-on-rails caching memcached