【问题标题】:caching activerecord results just like fragments像片段一样缓存 activerecord 结果
【发布时间】:2012-12-30 11:14:47
【问题描述】:

在我看来,我经常这样做:

<% cache("sports_menu_" +session[:lang], {:expires_in => 60.minutes}) do %>
...... # a load of stuff
<% end %>

但是,我发现很多时间都花在查询数据库以获取不经常更改的数据。 有没有办法以类似的方式缓存这些数据?

例如:

Model.find(:all, :select => "only a few fields", :conditions => "nasty conditions", :include => "some joins", :order => "date_time desc") 

这大约需要 7 秒,主表保存了大约 20M 条记录。许多用户点击了这个特定的操作,查询只运行一次/点击。但是将其缓存几分钟是有意义的,这样对其他人来说,它将从缓存中加载。顺便说一句,我正在使用 memcache。

我无法缓存整个操作,因为某些参数有时会更改,并且视图中有一些特定于语言环境的代码。

我考虑过将其移至视图级别,但对此感觉不太舒服,这会破坏使用 Rails 的意义。

TIA!

【问题讨论】:

    标签: mysql ruby-on-rails memcached


    【解决方案1】:

    在我看来 ActiveRecord::Cache::Store 是你想要的。你可以像this一样使用它。

    【讨论】:

    • 我以前用过类似的,效果很好。
    • 好吧,花了一些时间弄清楚如何在我疯狂的特殊情况下实现这一点,但现在这些需要 7-10 秒的网站页面现在可以立即加载 :) 非常感谢您指出这一点出来。
    猜你喜欢
    • 2017-05-10
    • 2011-10-19
    • 1970-01-01
    • 2019-12-23
    • 2012-09-18
    • 2013-08-03
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多