2012-01-18 112 views
1

我没有看到明显的东西:缓存策略在rails中。存在新对象的缓存策略导致缓存失效

我有一个价格表,在特定时间记录价格。所以目前的价格将是价格表中的最后一行。非常频繁地,查询表以显示条目,因此缓存取回对于停止(非常)频繁地查询到数据库是非常好的。

因此,据我所见,我的整个应用程序将完全缓存该数据,直到添加新行为止

轨道缓存处理得好吗?我看到更新活动记录对象的示例,您将超时缓存过期并强制更新对象以供再次检索 - 但我希望将对象集合(例如Price.find(:all))缓存到Price.find(:所有)都包含一个新对象,因此向数据库添加新行将不得不使缓存过期并强制进行新的检索 - 新的价格可能是最近的几天,或者可能只持续几分钟。)

如果不是不言而喻,这是我第一次看缓存。我将尝试在heroku上部署memcache。

非常感谢!

编辑:只是认为它可能是有用的指出,铁轨控制器只呈现JSON请求 - 丰富的单页面应用程序 - 所以缓存的主要内容是数据库查询。这就是为什么它让我感到困惑,我看到了部分缓存,页面缓存,但我很努力地理解上面希望描述的缓存类型。

戴夫

回答

0

要缓存你的价格,你可以使用下面的。将它放置在可重用的地方会很有帮助(例如您的模型)。

cached_prices = Rails.cache.fetch("cached_prices", :expires_in => 300) do 
    Price.find(:all) 
end 

上面的代码高速缓存5分钟(300秒)的查询。为了手动删除缓存条目(说时创建一个新的价格条目),请拨打以下:

Rails.cache.delete("cached_prices") 

为了使这个简单,你可以将缓存中的价格模型观察员删除代码。

你可以在这里找到所有类型的缓存你已经获得了更多的信息给你:http://guides.rubyonrails.org/caching_with_rails.html

+1

您还可以了解此间观察家:http://guides.rubyonrails.org/active_record_validations_callbacks.html – 2012-01-18 19:21:27