在rails 3中使用memcache获取一组记录

时间:2011-08-05 14:02:11

标签: ruby-on-rails ruby ruby-on-rails-3 memcached

我正在尝试了解如何在我的rails应用程序中正确使用memcache。

目前,在我的应用程序的标题视图中,我有一个像这样的条件:

<% if current_user.company.stats == true %>

因此,每次加载任何页面时,都会访问数据库以检查当前用户的公司是否已启用统计信息。

这当然对我来说很疯狂。

所以我的问题是,我应该如何使用memcache来解决这个问题。公司很少改变,因此应该缓存与它们相关的数据。

我理解像这样的东西会缓存它们:

  def self.all_cached
    Rails.cache.fetch('Company.all') { all }
  end

但我知道这不是我需要的 - 对吗?

1 个答案:

答案 0 :(得分:2)

Memcached可以被视为一个大的地图键值。

你应该在你的观点中写下这样的东西:

 <% if stats_enabled?(current_user.company) %>

然后编写辅助方法(例如ApplicationHelper):

def stats_enabled?(company)
  Company.stats_enabled?(company) 
end

和你模型上的缓存方法:

class Company < ActiveRecord::Base
  ...
  def self.stats_enabled?(company) 
     return Rails.cache.fetch(company.id) {
        Company.find(company.id).stat
     }
  end
  ...
end