基于参数的RubyonRails实例变量缓存



我将用户的杂项数据存储在user_data表中,当我使用我定义的关联检索该数据时,我实际上使用Ruby实例变量缓存来缓存它,就像这样。

def user_data(user_id)
  @user_data || = User.find(user_id).data 
end

但实例变量@user_data只有在为零时才会第一次被分配值,一旦它为用户保存了数据,比如说user_id等于1,当我在这个方法中传递user_id 2时,它会返回user_id 1的数据,因为它不会为它分配新的值,所以我的问题是如何根据函数的参数缓存它的值。

看看《使用Rails缓存》指南。Rails可以在多个级别上缓存数据,从全页面缓存到片段缓存,我强烈建议您阅读所有这些页面,以便做出明智的选择。

对于低级缓存,您可以这样做:

@user_data = Rails.cache.fetch("user_#{user_id}", expires_in: 1.hour) do
  User.find(user_id).data
end

默认情况下,Rails将缓存存储在磁盘上,但您可以设置memcache、内存存储等。

您可以为基于键的无形变量缓存使用哈希。我认为这正是你想要的。

def user_data(user_id)
  @user_data ||= {}
  @user_data[user_id.to_i] || = User.find(user_id).data 
end